0

例:

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

4

2 に答える 2

1

編集:コールバックからそのプライベートプロパティを変更する必要がある場合、コールバックはクロージャーではなくオブジェクトメソッドでなければならないようです。そう:

preg_replace_callback('/aaaa/', array($this, 'foo'), $str);

あなたの方法はどこfooにありますか。ただし、プロパティを変更する必要がない場合は、クロージャーをコールバックとして使用し、値をx変数に割り当てればuse問題ありません。


$thisまた、PHP 5.4からはクロージャー内からアクセスできることにも言及する必要があります。

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 に答える