PHP – 関数 – 無名関数/クロージャ―/コールバック

基本

無名関数(anonymous function)はfunction()で定義。無名関数はクロージャ―(closure)とも呼ばれる。

戻り値を返す例。

引数をとる例。

use~エンクロージャーの変数

クロージャ―の外側(エンクロージャー)のスコープの変数をクロージャ―内で使う場合は、useを加える。

useで持ち込まれるエンクロージャーの変数の値は、関数定義前に定義された内容。上の例では$greetに関数が定義される前の'Hello'が使われていて、実行前の'Hi'は使われない。

コールバック

無名関数を使ったコールバック

以下の関数は、引数$callbackを関数として想定し、その引数に$nameを与えた結果を表示する。

$nameに文字列'Jane'を与え、$callbackに無名関数を与えて実行。この無名関数は引数の$nameを使って"Hi, $name"とい文字列を返す。

$callbackに違う動作をする無名関数を与えて実行。この無名関数は引数の$nameを使って"Hello $name. How arey you?"という文字列を返す。

変数に定義した無名関数のコールバック

コールバックを都度無名関数で定義するのではなく、あらかじめ変数に定義しておいた関数を渡すことができる。

これによって、メッセージのディスパッチなどが柔軟に行えるようになる。

可変関数によるコールバック

コールバックを可変関数で実装した例が以下の通り。

なお、無名関数を変数に代入した場合の変数名とfunctionで定義した関数名は重複してもエラーとならない。

array_map()の例

コールバックを使った内部関数にarray_map()がある。

array_map($callback, $array);

コールバックで直接無名関数を定義し、配列の各要素の自乗を要素とする配列を計算させる。

もちろん引数のコールバックに、変数に定義した関数や可変関数を用いることもできる。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です