0

例子:

class foo {
    private $x=array();
    public function foo() {
        $z = function ($a) use (&$this->x) {
            ...
        }
    }
}

错误:不能使用 $this 作为词法变量


根据情况,我们可以将anonymous声明为方法......所以另一个问题来了。我的“真实案例”,

// 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 ...

4

2 回答 2

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);
于 2013-06-24T15:22:28.987 回答
1

尝试这个:

class foo {
    private $x=array();
    public function foo() {
        $v = &$this->x;
        $z = function ($a) use ($v) {
            ...
        }
    }
}
于 2013-06-24T15:22:39.787 回答