-1

问题:

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

4

1 回答 1

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

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

将以下方法添加到您的 Controller 类:

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

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

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

于 2013-11-14T14:19:24.937 回答