この記事の内容は、php の匿名関数とクロージャ関数の詳細な説明を共有することです。必要な友人は、
phpの公式説明は以下の通りです:
匿名関数(匿名関数)はクロージャ関数(クロージャ)とも呼ばれ、指定された名前のない関数を一時的に作成することができます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。
<?php echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld ?>上記の例では、
preg_replace_callback関数には最初のパラメータが必要です。は、データを照合するために使用される正規表現です。2 番目のパラメーターは関数で、3 番目のパラメーターは照合する必要がある文字列です。次のように記述することもできます
<?php $testFunc = function ($match) { return strtoupper($match[1]); }; echo preg_replace_callback('~-([a-z])~', $testFunc, 'hello-world'); // 输出 helloWorld ?>しかし、このメソッドが必要なのは明らかに次のとおりです。名前を付けるために、それを変数に割り当てる必要はありません (値を変数に割り当てるプロセス: PHP はこの式を自動的にオブジェクトに変換します)。組み込みクラスのインスタンスをクロージャして変数に代入します)
クロージャ関数
PHPの匿名関数はクロージャ関数とも呼ばれるので違いはありません。しかし、一般的な意味でのクロージャの概念はこのようなものではありません。まず伝統的な意味でのクロージャについて説明し、js のクロージャと php のクロージャ (匿名関数) を比較する記事を提供します。JavaScript クロージャ (クロージャ) を学ぶ - Ruan Yifeng
<?php function a(){ $a = 11; function b(){ $b = 22; echo $a; echo $b; } b(); } a(); //报Notice:Undefined variable: a in index.php on line 6 //22 ?>
そして、上記の記事から、それが js で可能であることがわかります。したがって、PHP の匿名関数はクロージャ関数とも呼ばれます。次のように、親スコープからクロージャ関数に変数を渡すこともできます (js が親スコープの変数を取得するのと同様の効果を実現します)。
上記の例の出力はあなたが考えているものと異なりますか?
: クロージャ関数 (匿名関数) は、いつ呼び出されたかに関係なく、関数の定義時に use を使用して副作用ドメイン変数を取得します。呼び出し時に変数値を取得したい場合は、参照渡しする必要があります。使用方法は使用シーンによって異なります。
いくつかの一般的なシナリオをリストします
コールバック関数として
<?php $count = 0; $a = function() { var_dump($count); }; $b = function() use ($count) { var_dump($count); }; $count++; $c = function() use (&$count) { var_dump($count); }; $count++; $a(); // null Notice: Undefined variable: count in $b(); // int 0 $c(); // int 2 $count++; $b(); // int 0 ?>
再利用できない 1 回限りの使用関数である場合は、クロージャ関数を使用できます
Use array_work( ) 関数は匿名関数と連携して、foreach レイヤーの数を削減します
以上がPHPの匿名関数とクロージャ関数について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。