重複の可能性:
別の場所で定義されている無名関数内で変数を使用する
PHP >= 5.4 では、匿名関数をオブジェクトにバインドするorメソッドを含むClosure
クラスがあり、そのクラス内で定義されているかのように、クロージャが変数にアクセスできるようになっています。bind
bindTo
$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
を再定義するときに親スコープ変数を使用する方法がすでにあるかどうか、誰か考えはありますか?bind
bindTo