0

私はcakePHPを使用しました。これは、モデルがコントローラー内のプロパティとして既に作成されている場合は、コントローラー内の$ this-> model_nameという名前のプロパティにアクセスでき、インスタンスを作成しなくてもよい機能を備えています。モデルオブジェクト。

私が理解していることから、すべてのプロパティを使用するにはクラスで定義する必要があるので、上記を完了するための別の方法はありますか?

  // Sample code:
  <?php
  class controller {
        public function create_model($model_name) {
              // Assuming that I have spl_autoload enabled to achieve the below:
              $this->$$model_name = new model_name();      
        }
  }
4

1 に答える 1

0

あなたは魔法のメソッドでこのようなことをすることができます(_set ()_get()

サンプルコードは次のとおりです。

class Controller
{
    protected $models;

    public function __get($key)
    {
        return $this->models[$key];
    }

    public function __set($key, $value)
    {
        $this->models[$key] = $value;
    }
}

__set()とで独自の機能を実装できます__get()。でデータを設定できます$this->my_model = $something;

これは、特定の例に合わせて調整されたものです。

public function __get($key) // you will only need __get() now
    {

        if (array_key_exists($key, $this->models) && $this->models[$key] instanceof $key) { 
            return $this->models[$key];
        } else {
            $this->models[$key] = new $key;
            return $this->models[$key];
        }

    }

したがって、$ this-> my_modelは、my_modelが存在しない場合はインスタンス化を試み、存在する場合は現在のオブジェクトを返します。おそらく最善の解決策ではありませんが、それがどのように機能するかを理解できるように、ここに追加しました。

于 2013-01-21T11:29:36.863 に答える