11

use()PHP で無名関数を使用する場合、キーワードを使用することで、そのスコープのすぐ外側から変数を簡単に使用できます。

私の場合、無名関数は既にどこかで定義されていますが、後で (他の場所で) クラス内で呼び出されます。

次のコードは、アイデアを説明するためのものです。

<?php

$bla = function ( $var1 ) use ($arg)
        {
            echo $var1;
        };

class MyClass
{
    private $func;

    public function __construct ( $func )
    {
        $this->func = $func;
    }

    public function test ( $arg )
    {
        $closure =  $this->func;
        $closure ( 'anon func' );
    }
}

$c = new MyClass($bla);
$c->test ( 'anon func' );

私がやっていることは、変数を作成してanonymous functionそれを変数に格納することです。その変数をクラスのメソッドに渡します。そこで匿名関数を実行します。

しかし、use()キーワードを使用してこの方法$argからパラメーターを取得することはできません。匿名関数が の外部で宣言されているmethodためです。method

しかし、匿名関数が実行されるメソッドから変数を取得する方法が本当に必要です。匿名関数が別の場所で宣言されている場合、それを行う方法はありますか..?

4

2 に答える 2

20

useキーワードのポイントは、特定の環境状態を親スコープからクロージャー継承/クローズすることです。

$foo = 1;

$fn = function() use ($foo) {
    return $foo;
};

$foo = 2;

echo $fn(); // gives 1

後でクローズする場合$fooは、後でクロージャーを定義するか、$foo常に現在の値 (2) にしたい場合$fooは、通常のパラメーターとして渡します。

于 2013-01-03T12:28:33.413 に答える