(我知道这可能是一个敏感的决定,但我很感激我们避免回答“请不要。”)
我有一个类,其构造函数将回调作为参数。在这个回调中,我认为在语义上最正确的是$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}}
但是这迫使了一个额外的要求,我宁愿不需要。
答案 0 :(得分:6)
$that = $this;
cb(function () use ($that) {
$that-> ...
});
此$this
是一个特殊关键字,您不能在对象上下文之外使用它。并且匿名函数当前在对象上下文之外运行。这显然会在下一版本的PHP(5.4)中发生变化。