Php 在对象中创建动态特性

Php 在对象中创建动态特性,php,models,controllers,Php,Models,Controllers,我使用了cakePHP,它有一个很好的特性,模型(如果存在)已经作为控制器中的属性创建,因此我可以有效地访问控制器中名为$this->model\u name的属性,而无需创建模型对象的实例 据我所知,所有属性都必须在一个类中定义才能使用它,那么有没有其他方法可以让我完成上述工作 // Sample code: <?php class controller { public function create_model($model_name) {

我使用了cakePHP,它有一个很好的特性,模型(如果存在)已经作为控制器中的属性创建,因此我可以有效地访问控制器中名为$this->model\u 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();      
        }
  }
//示例代码:

你可以用神奇的方法来做类似的事情(检查并确认)

以下是一些示例代码:

class Controller
{
    protected $models;

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

    public function __set($key, $value)
    {
        $this->models[$key] = $value;
    }
}
您可以在
\uu set()
\uu get()
中实现自己的功能。您可以使用
$this->my\u 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 with尝试实例化my_model(如果它不存在),如果它存在,则返回当前对象。可能不是最佳解决方案,但将其添加到此处,以便您了解它的工作原理。

您遇到了什么错误?