问题:
// TODO: add $name to $models array in Controller class
如何将$name
类中的model()
内的Load
添加到$models
类中的Controller
数组中?
注意:我在分隔文件中有Load
和Controller
个类。
PHP:
<?php
class Controller {
public $models = array();
public $load;
//TODO: for each model create instance
// public $name;
public function __construct() {
$this->load = new Load();
// TODO: for each model create instance
// $this->name = new Name();
}
}
class Load {
public function model($name) {
require(APP_DIR . 'models/' . strtolower($name) . '.php');
$model = new $name;
// TODO: add $name to $models array in Controller class
return $model;
}
}
修改
我的目标:
如果我在Controller中加载模型:$this->load->model('model_name');
那么我希望将该加载模型的实例设为$this->model_name->method();
答案 0 :(得分:0)
由于您没有在Load类中使用任何本地属性,因此可以将模型方法设为静态:
public static function model($name) {
require(APP_DIR . 'models/' . strtolower($name) . '.php');
$model = new $name;
// TODO: add $name to $models array in Controller class
return $model;
}
然后,您可以从Controller类中调用该方法,如下所示:
$model = Load::model($name);
<强>更新强>:
您评论道:
如果我在某个地方加载模型我想在Controller中创建实例,那么我可以将模型用作$ this-&gt; model_name-&gt; method();
您可以使用魔术方法__get
(documentation)以这种方式访问您的模型。
将以下方法添加到Controller类:
public function __get($model) {
return Load::model($model);
}
添加此功能后,$this->model_name->somemethod()
将在您的控制器中运行。
显然这需要一些微调,但它会做你想要的。