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