php在控制器中创建加载模型的实例

时间:2013-11-14 14:15:12

标签: php oop

问题:

// TODO: add $name to $models array in Controller class

如何将$name类中的model()内的Load添加到$models类中的Controller数组中?

注意:我在分隔文件中有LoadController个类。

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();

1 个答案:

答案 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();

您可以使用魔术方法__getdocumentation)以这种方式访问​​您的模型。

将以下方法添加到Controller类:

public function __get($model) {
    return Load::model($model);
}

添加此功能后,$this->model_name->somemethod()将在您的控制器中运行。

显然这需要一些微调,但它会做你想要的。