Php 在对象中创建动态特性
我使用了cakePHP,它有一个很好的特性,模型(如果存在)已经作为控制器中的属性创建,因此我可以有效地访问控制器中名为$this->model\u name的属性,而无需创建模型对象的实例 据我所知,所有属性都必须在一个类中定义才能使用它,那么有没有其他方法可以让我完成上述工作Php 在对象中创建动态特性,php,models,controllers,Php,Models,Controllers,我使用了cakePHP,它有一个很好的特性,模型(如果存在)已经作为控制器中的属性创建,因此我可以有效地访问控制器中名为$this->model\u name的属性,而无需创建模型对象的实例 据我所知,所有属性都必须在一个类中定义才能使用它,那么有没有其他方法可以让我完成上述工作 // Sample code: <?php class controller { public function create_model($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();
}
}
//示例代码:
你可以用神奇的方法来做类似的事情(检查并确认)
以下是一些示例代码:
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(如果它不存在),如果它存在,则返回当前对象。可能不是最佳解决方案,但将其添加到此处,以便您了解它的工作原理。您遇到了什么错误?