プロジェクトではクロージャの形式に遭遇するのは避けられませんが、クロージャでは変数のスコープは何でしょうか?以下に簡単な例をいくつか示します。
#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');# への参照を追加します。 # #上記の結果は hello_java を出力し、アドレスが参照されるときに変数 a の値が関数 func に渡されることを示します。 同様に、$a = 'go' が削除された場合;上記の結果は hello_go を出力します;上記の 3 つの簡単なテストは、クロージャを明確に説明しています。 パラメータのスコープ内部。 アドレス参照を使用しない場合、外部変数が変化しても無名関数の変数値は変化しません。 (クロージャの意味) アドレス参照使用後は、外部関数のパラメータ値によってパラメータ値が変更されます。 PHP 関連の知識について詳しくは、
PHP チュートリアル をご覧ください。
以上がPHPクロージャ変数のスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。