在PHP中重新分配$ this

时间:2011-08-18 22:28:35

标签: php scope this

我知道这可能是一个敏感的决定,但我很感激我们避免回答“请不要。”

我有一个类,其构造函数将回调作为参数。在这个回调中,我认为在语义上最正确的是$this变量可用作对回调所属实例的引用。 (我注意到5.4已经在类中定义的匿名函数的上下文中恢复了$this,但是即使这个更改也没有帮助,因为函数作为函数传递提到的构造函数的参数

问题来自于实例未作为参数传递给回调,而是由use()提供

use()倾向于对$this哭泣,说明它不能用作词汇变量。

有没有办法,不将其作为参数传递(任何方法,use()或不是 ... function($foo, $bar) use($array_with_this){ extract($array_with_this); // contains instance with key 'this' // code using $this } ... ,可能很好)来实现这一目标?

手头,我唯一能想到的就是:

{{1}}

但是这迫使了一个额外的要求,我宁愿不需要。

1 个答案:

答案 0 :(得分:6)

$that = $this;
cb(function () use ($that) {
    $that-> ...
});

$this是一个特殊关键字,您不能在对象上下文之外使用它。并且匿名函数当前在对象上下文之外运行。这显然会在下一版本的PHP(5.4)中发生变化。