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 回答