我在 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。我理解它为什么会发生,因为我已经分配了一个局部变量,该变量嵌入到我的闭包的定义中,随后嵌入到“钩子”属性中。
请建议如何解决这个问题。对于包含“可调用”属性的类,我如何克隆它并使闭包正确引用当前对象。也许我可以遵循不同的模式。谢谢!