ホームページ >バックエンド開発 >PHPチュートリアル >PHPの匿名関数とクロージャ関数について詳しく解説

PHPの匿名関数とクロージャ関数について詳しく解説

零到壹度
零到壹度オリジナル
2018-04-11 17:53:073116ブラウズ

この記事の内容は、php の匿名関数とクロージャ関数の詳細な説明を共有することです。必要な友人は、

php の匿名関数とクロージャ関数を参照してください。タグ: 匿名関数クロージャ関数 php クロージャ関数 php 匿名関数の使い方


はじめに: 匿名関数とクロージャ関数は特に高度な知識ではありませんが、誰もが慣れているため、始めたばかりの多くの友人はいつも混乱しています。上記は呼び出し用です。匿名関数とクロージャ関数は何に使用されますか?


匿名関数

phpの公式説明は以下の通りです:

匿名関数(匿名関数)はクロージャ関数(クロージャ)とも呼ばれ、指定された名前のない関数を一時的に作成することができます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。

ここで述べていることは非常に簡単で、コールバック関数として使用できます。次の例は

コールバック関数として使用されます


<?php
echo preg_replace_callback(&#39;~-([a-z])~&#39;, function ($match) {
    return strtoupper($match[1]);
}, &#39;hello-world&#39;);
// 输出 helloWorld
?>

上記の例では、

preg_replace_callback関数には最初のパラメータが必要です。は、データを照合するために使用される正規表現です。2 番目のパラメーターは関数で、3 番目のパラメーターは照合する必要がある文字列です。次のように記述することもできます

<?php
$testFunc = function ($match) {
        return strtoupper($match[1]);
    };
 
 echo preg_replace_callback(&#39;~-([a-z])~&#39;, $testFunc, &#39;hello-world&#39;);
 // 输出 helloWorld
 ?>

しかし、このメソッドが必要なのは明らかに次のとおりです。名前を付けるために、それを変数に割り当てる必要はありません (値を変数に割り当てるプロセス: PHP はこの式を自動的にオブジェクトに変換します)。組み込みクラスのインスタンスをクロージャして変数に代入します)

クロージャ関数

PHPの匿名関数はクロージャ関数とも呼ばれるので違いはありません。しかし、一般的な意味でのクロージャの概念はこのようなものではありません。まず伝統的な意味でのクロージャについて説明し、js のクロージャと php のクロージャ (匿名関数) を比較する記事を提供します。

JavaScript クロージャ (クロージャ) を学ぶ - Ruan Yifeng

実際、php の関数はスコープ内の変数を呼び出すことができないため、php には従来の意味でのクロージャ関数はありません。以下に示すように

<?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. 再利用できない 1 回限りの使用関数である場合は、クロージャ関数を使用できます

  2. Use array_work( ) 関数は匿名関数と連携して、foreach レイヤーの数を削減します

  3. など

以上がPHPの匿名関数とクロージャ関数について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。