示例:
class foo {
private $x=array();
public function foo() {
$z = function ($a) use (&$this->x) {
...
}
}
}
错误:不能将$ this用作词法变量
符合情况,我们可以将匿名声明为方法......所以另一个问题就到了。我的“真实案例”,
// a very specific problem...
class foo {
private $x=array();
public function foo($m) {
// ... use $this->x and $m ...
return $ret;
}
public function bar() {
$str = preg_replace_callback('/aaaa/', $this->foo, $str);
}
}
错误:未定义的属性$ foo ...
答案 0 :(得分:1)
编辑:如果您需要从回调中修改该私有属性,则看起来您的回调应该是对象方法,而不是闭包。所以:
preg_replace_callback('/aaaa/', array($this, 'foo'), $str);
foo
是你的方法。但是如果不需要修改属性,则使用闭包作为回调并将x
的值赋给您use
的变量。
我还要提一下,从PHP 5.4开始,您可以从闭包中访问$this
:
preg_replace_callback('/aaaa/', function($a){
// $this->x is accessible here
}, $str);
答案 1 :(得分:1)
试试这个:
class foo {
private $x=array();
public function foo() {
$v = &$this->x;
$z = function ($a) use ($v) {
...
}
}
}