我想问一下有关PHP克隆/复制对象到$this变量的问题。
目前我是MVC的新手,我想做一些像CodeIgniter这样的事情。
我想直接访问变量。
在我的__construct()中,我总是将全局变量传递给新的控制器(类),
例如:
function __construct($mvc)
{
$this->mvc = $mvc;
}在$mvc内部获取配置对象,vars对象。
例如,当前
function index()
{
$this->mvc->config['title'];
$this->mvc->vars['name'];
}**我想要的更直接**
function index()
{
$this->config['title'];
$this->vars['name'];
}我试过了
function __construct($mvc)
{
$this = $mvc;
}或
function __construct($mvc)
{
$this = clone $mvc;
}它没有成功。你知道,我可以把$this->mvc关闭到$this级别吗?我每试一次也没有成功。请帮帮忙,谢谢!
发布于 2010-02-25 15:12:08
一个不错的解决方案是覆盖__get()
public function __get($name) {
return $this->mvc->$name;
}每当您尝试访问类中不存在的属性时,都会调用__get()。这样,您就不必在类中复制mvc的每个属性(这可能会覆盖类中的属性)。如有必要,您还可以使用property_exists检查mvc中是否存在$name。
发布于 2010-02-25 14:56:03
看起来这就是你要做的..。
function __construct($mvc)
{
foreach($mvc as $k => $v) {
$this->$k = $v;
}
}发布于 2010-02-25 16:02:44
public function __get($name)
{
if (array_key_exists($name, $this->mvc))
{
return $this->mvc->$name;
}
$trace = debug_backtrace();
trigger_error(
'Undefined property via __get(): ' . $name .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return NULL;
}我添加这个是为了验证。
https://stackoverflow.com/questions/2332194
复制相似问题