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
。