-1

質問:

// 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;
    }

}

編集:

私の目標:コントローラーにモデルを次のようにロードする場合:$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);



更新

あなたのコメント:

モデルをどこかにロードする場合、コントローラーにインスタンスを作成したいので、モデルを $this->model_name->method(); として使用できます。

そのような方法でモデルにアクセスするには、魔法の方法__get( documentation ) を使用できます。

Controller クラスに次のメソッドを追加します。

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

この関数を追加する$this->model_name->somemethod()と、コントローラーで機能します。

明らかに、これには微調整が必​​要ですが、それはあなたが望むことをします。

于 2013-11-14T14:19:24.937 に答える