重複の可能性:
別の場所で定義されている無名関数内で変数を使用する
PHP >= 5.4 では、匿名関数をオブジェクトにバインドするorメソッドを含むClosureクラスがあり、そのクラス内で定義されているかのように、クロージャが変数にアクセスできるようになっています。bindbindTo$this
簡単な例:
<?php
$closure = function() {
echo $this->bla; //prints "bbb"
};
class A
{
public $bla = 'bbb';
public function blaat($closure)
{
$someVar = 'something';
$bc = Closure::bind($closure, $this, 'A');
$bc();
}
}
$a = new A();
$a->blaat($closure);
それはすべてとてもいいことですが、useキーワードはどうですか..?
クラスのメソッド内でクロージャーを再バインドすると、おそらくclosure「ローカルに」定義された変数にもアクセスできるようになり、その親スコープが必要になります。たとえば$someVar、上記の例の変数。しかし、クラスのbindメソッドは、キーワードや、親スコープの変数を使用する機能をClosure気にしません。use
このようにやや不完全に感じます...これがサポートされるかどうか、または orメソッドで aclosureを再定義するときに親スコープ変数を使用する方法がすでにあるかどうか、誰か考えはありますか?bindbindTo