プロジェクトではクロージャの形式に遭遇するのは避けられませんが、クロージャでは変数のスコープは何でしょうか?以下に簡単な例をいくつか示します。
#e1
function test_1() { $a = 'php'; $func = function ($b) use ($a) { // $a = 'java'; echo $b.'_'.$a; }; return $func; } $test = test_1(); $test('hello');
上記の結果では hello_php が出力され、無名関数 func をパラメータとして使用することで $a が変数として渡されることがわかります。 ; $ a = 'java' コメントを削除すると、上記の結果が出力されます hello_java
e2: 上記の関数を
function test_2() { $a = 'php'; $func = function ($b) use ($a) { // $a = 'go'; echo $b.'_'.$a; }; $a = 'java'; return $func; } $test = test_2(); $test('hello');
として書き換えると、上記の結果が出力されますhello_php. 説明はtest_2にあります。 $a に2回目に値が代入されるとき、その値は func 関数には渡されません。
同様に、$a = 'go' が削除された場合、上記の結果は hello_go
e3 を出力します。$a
function test_3() { $a = 'php'; $func = function ($b) use (&$a) { //$a = 'go'; echo $b.'_'.$a; }; $a = 'java'; return $func; } $test = test_3(); $test('hello');
PHP チュートリアル をご覧ください。
以上がPHPクロージャ変数のスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。