2

重複の可能性:
別の場所で定義されている無名関数内で変数を使用する

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

4

0 に答える 0