匿名関数内のグローバル スコープの変数へのアクセス
PHP では、匿名関数は通常、外側の関数のローカル スコープ、または次の場合はグローバル スコープを継承します。関数の外側で定義されます。ただし、匿名関数内からグローバル スコープの変数を変更しようとすると、問題が発生する可能性があります。
グローバル スコープの変数の変更
次の例を考えてみましょう。
$variable = "nothing"; functionName($someArgument, function() { $variable = "something"; }); echo $variable; // Output: "nothing"
匿名関数内で $variable を変更しようとしても、出力はそのままになります "何もない。"これは、匿名関数が独自のスコープを作成し、グローバル スコープを直接継承しないためです。
解決策: クロージャ
この制限に対処するには、クロージャを利用できます。クロージャを使用すると、変数を囲んでいるスコープから新しいスコープにキャプチャできます。匿名関数内からグローバル スコープの変数を変更するには、次の構文を使用します。
functionName($someArgument, function() use (&$variable) { $variable = "something"; });
変数名の前に use を追加し、& で参照することで、変数を参照によってキャプチャするクロージャを作成します。匿名関数内での変更を可能にします。
結論
使用クロージャを使用すると、匿名関数内からグローバル スコープの変数にアクセスして変更できるようになり、匿名関数内に新しいスコープを作成するという制限が克服されます。参照によって変数をキャプチャすることにより、匿名関数のスコープ外に保持される変更を実行できます。
以上がPHP の匿名関数内からグローバル変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。