【发布时间】:2012-04-24 22:04:09
【问题描述】:
我在 PHP5.3 中有以下类:
class MyClass {
public $a=1;
public $hook;
function setHook(){
$t=$this;
$this->hook=function() use($t){
echo $t->a;
};
}
}
以下语法按预期工作:
$x = new MyClass();
$x->setHook();
call_user_func($x->hook); // outputs 1;
但是,如果我继续使用此代码:
$y = clone $x;
$y->a = 2;
call_user_func($y->hook);
然后它仍然会输出 1。我明白为什么会这样,因为我已经分配了一个局部变量,该变量嵌入到我的闭包定义中,随后嵌入到“钩子”属性中。
请提出解决此问题的方法。对于包含“可调用”属性的类,我如何克隆它并使闭包正确引用当前对象。也许我可以遵循不同的模式。谢谢!
【问题讨论】: