この記事では、一定の参考価値のあるPHPクロージャー(Closure)の導入を中心に紹介していますので、皆さんにもシェアしておきますので、困っている友達は参考にしてください
$func = function() { }; //带结束符ご覧のとおり、匿名関数には名前がないため、それを使用したい場合は変数に返す必要があります。匿名関数も通常の関数と同じようにパラメータを宣言でき、呼び出し方法も同じです。
$func = function( $param ) { echo $param; }; $func( 'some string' ); //输出: //some stringちなみに、PHP がクロージャを導入する前には、匿名関数を作成できる関数 create function もありましたが、コードのロジックは文字列としてしか記述できませんが、見た目がわかりにくく保守が難しいため、使用する人はほとんどいません。 クロージャの実装匿名関数を通常の関数のパラメータとして渡し、それらを返すこともできます。これにより、単純なクロージャが実装されます。 以下に 3 つの例があります
//例一 //在函数里定义一个匿名函数,并且调用它 function printStr() { $func = function( $str ) { echo $str; }; $func( 'some string' ); } printStr(); //例二 //在函数中把匿名函数返回,并且调用它 function getPrintStrFunc() { $func = function( $str ) { echo $str; }; return $func; } $printStrFunc = getPrintStrFunc(); $printStrFunc( 'some string' ); //例三 //把匿名函数当做参数传递,并且调用它 function callFunc( $func ) { $func( 'some string' ); } $printStrFunc = function( $str ) { echo $str; }; callFunc( $printStrFunc ); //也可以直接将匿名函数进行传递。如果你了解js,这种写法可能会很熟悉 callFunc( function( $str ) { echo $str; } );クロージャと外部変数を接続するキーワード: USEクロージャは、コードのコンテキストでいくつかの変数と値を保存できます。それらが配置されているブロック。 PHP のデフォルトでは、匿名関数は、それが配置されているコード ブロック内のコンテキスト変数を呼び出すことはできませんが、 use キーワードを使用する必要があります。 別の例を見てみましょう:
function getMoney() { $rmb = 1; $dollar = 6; $func = function() use ( $rmb ) { echo $rmb; echo $dollar; }; $func(); } getMoney(); //输出: //1 //报错,找不到dorllar变量ご覧のとおり、ドルは use キーワードで宣言されておらず、この匿名関数では取得できないため、注意が必要です。開発中のこちらへの質問です。 無名関数でコンテキスト変数を変更できるのかと疑問に思う人もいるかもしれませんが、それは不可能であることがわかりました:
function getMoney() { $rmb = 1; $func = function() use ( $rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //1ああ、use は変数のみを参照していることがわかりました。ただのコピーです。ただし、コピーではなく、変数への完全な参照が必要です。 この効果を実現するには、変数の前に & 記号を追加するだけです:
function getMoney() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //输出: //1 //2わかりました。これにより、匿名関数がコンテキスト変数を参照できるようになります。無名関数を外部に返すと、無名関数は use で参照した変数を保存しますが、外部からはその変数を取得できなくなりますので、「クロージャ」の概念がより明確になるかもしれません。 説明に従って上記の例を変更します:
function getMoneyFunc() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; return $func; } $getMoney = getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); //输出: //1 //2 //3概要PHP クロージャの特性についてはそれほど驚くべきことではありません。実際、同様の、またはさらに強力なものがあります。 CLASSを利用すれば実現できるが、jsのクロージャとは比較にならない機能であり、今後のPHPのクロージャ対応の改善に期待するのみである。ただし、匿名関数は依然として非常に便利で、たとえば、preg_replace_callback などの関数を使用する場合、コールバック関数を外部で宣言する必要はありません。 上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 関連する推奨事項:
以上がPHP クロージャの概要 (クロージャ)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。