匿名関数であるPHPの閉鎖(閉鎖)。PHP5.3が導入されます。
構文の閉鎖は、単純なキーワードのみを使用し、ことに留意すべきである使用および閉鎖が外部変数に接続されています。
の$ A = 関数(){($ B)を使用
}
閉鎖パッケージいくつかの機能:
foreachのは、コードを循環枯渇します
<?PHP // 項目のいくつかの数と、各項目を含む基本的なショッピングカートは、追加されました。 // 全ての商品のショッピングカートの合計価格を計算するために使用する方法があります。この方法では、クロージャとしてコールバック関数を使用しています。 クラスカート{ CONST PRICE_BUTTER = 1.00 ; CONST PRICE_MILK = 3.00 ; CONST PRICE_EGGS = 6.95 ; 保護 $製品= []; 公共機能追加($製品、$量){ $ この - >商品[$製品] = $数量; } 公共getQuantity($製品){としての機能 リターン ISSET($ この- >製品の[$製品])?$ この - > 製品の[$製品]:FALSE; } パブリック関数getTotal($税){ $合計 = 0.00 。 $コールバック = 関数($量、$製品)を使用する($税、&$合計){ $ pricePerItem =定数(__ CLASS__。" :: PRICE_ " 。 strtoupper($産物))。 $合計 + =($ pricePerItem * $量)*($税+ 1.0 )。 }。 あるarray_walk($ この - > 製品、$コールバック); 戻るラウンド($合計、2 ); } } $ my_cart = 新しい新しいカート; // カートにエントリを追加するには $ my_cart->追加(' バター'、1。;) $ my_cart - > [追加(' ミルク'、3。 ); $ my_cart - > [追加(' 卵'、6。); // 。合計金額を果たし、これの消費税の5% 印刷が$ my_cart-> getTotal(0.05。)" \ N- " ; // 結果のは、54.29であります ?>
我々はgetTotal機能を変換する場合はここでは、foreachのを使用するようにバインドされています
リダクション関数のパラメータ
<?PHPの 関数のhtml($コード、$ idは = ""、$のクラスは、 = "" ){ 場合($ IDを==!"" ){ $ idは = " ID = \" $ IDが\」" ; } $ クラス =($のクラス!== "" )?" クラス= \" $クラス\ " ":" > " ; $オープン = " <$コード$ IDが$クラス" 。 $近いです = " リターン機能($インナー= "" )を使用する($オープン、$近い){ リターン " $ $内の$近いを開きます" ;}; } ?>
それは通常の方法であれば、我々はそのように関係なく、コードリーダーの使用や閉鎖などない使用、内側のHTMLの関数パラメータを配置します
再帰関数を持ち上げ
<?PHPの $のFIB =関数($ n)が使用(&$のFIB){ 場合($ N == 0 || $ N == 1 ){ リターン 1 。 } 戻りの$ FIB($ N - 1)+ $のFIB($ N - 2 )。 }。 エコー$のFIB(2)。" \ nを" ; // 2 $は=うその$嘘を。 $のFIB =関数(){ダイ(' エラー');}; // $ FIB変数書き換え エコー$嘘(5)。//エラー$の嘘は閉鎖によって参照されているため、 ?>
(事前に定義されていないFIBは、機能を見つけることができない)、ここで使用&取得しないエラーFIB(FIB(n-1)はタイプで、使用・使用の問題に注意してください
あなたが使用する必要があるとき、私は、閉鎖サイクル機能を持ち上げるために使用したいです
<?PHPの $の再帰的 =関数()を使用(&$の再帰的){ // 関数は再帰的な$として利用できるようになりました } ?>
遅延バインディングについて
あなたは、可変内部遅延バインディングを使用する必要がある場合は、参照(&)を使用する必要がある、または定義が理解//使用(&$のVAR)での使用にコピーを作成する時期
<?PHPの $結果 = 0 ; $ 1つの = 関数(){のvar_dump($結果);}; $ 2つの = 関数()を使用する($結果){のvar_dump($結果);}; $ 3つの =関数()を使用する(&$結果){のvar_dump($結果);}; $結果 ++ ; $一方(); // 出力NULL:$結果がスコープ内にない $ 2つ(); // 出力はint(0):$結果がコピーされた )$ 3つ(; // 出力はint(1)
そして、あなたが呼び出すときに割り当てに代わって引用された文献の使用、または述べた時間の割り当てなし