在PHP中重新分配$ this

Dan*_*ugg 4 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

    } ...
Run Code Online (Sandbox Code Playgroud)

但这迫使我不再需要额外的要求.

dec*_*eze 6

$that = $this;
cb(function () use ($that) {
    $that-> ...
});
Run Code Online (Sandbox Code Playgroud)

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