Php 如何将对象上下文传递给匿名函数?

Php 如何将对象上下文传递给匿名函数?,php,scope,anonymous-function,Php,Scope,Anonymous Function,有没有一种方法可以将对象上下文传递给匿名函数,而不将$this作为参数传递 class Foo { function bar() { $this->baz = 2; # Fatal error: Using $this when not in object context $echo_baz = function() { echo $this->baz; }; $echo_baz(); } } $f =

有没有一种方法可以将对象上下文传递给匿名函数,而不将
$this
作为参数传递

class Foo {
    function bar() {
        $this->baz = 2;
        # Fatal error: Using $this when not in object context
        $echo_baz = function() { echo $this->baz; };
        $echo_baz();
    }
}
$f = new Foo();
$f->bar();

定义函数时,您可以将
$this
分配给某个变量,然后使用
use
关键字将此变量传递给函数,尽管我不确定它是否更易于使用。无论如何,这里有一个例子:

class Foo {
    function bar() {
        $this->baz = 2;
        $obj = $this;
        $echo_baz = function() use($obj) { echo $obj->baz; };
        $echo_baz();
    }
}
$f = new Foo();
$f->bar();

值得注意的是,
$obj
将被视为标准对象(而不是
$this
),因此您将无法访问私有和受保护的成员。

注意:PHPV5.4现在允许在匿名函数中使用
$this