PHPを学び始めた頃は、関数には名前がついていると思っていました。
しかし、関数でも名前がついていないものもあります。
それが無名関数と呼ばれるものです。
今回は無名関数について以下の内容でお話をしていきます。
【基本】無名関数について
【基本】無名関数使用のメリット
【応用】無名関数の使い方
わかりやすく解説しますので、是非読んでください。
無名関数とは
無名関数は、クロージャとも呼ばれます。
関数は名前を付けて作成したり、呼び出したりしますよね。
しかし、この関数は名前をつけなくても呼び出すことが出来るのです。
因みにPHP5.3以上で対応、つまりそれより前のバージョンでは使用できません。
記述としては以下のようになります。
function(★引数★){ //処理 };
通常functionの後に関数名が入りますが、無名関数の場合はそれがありません。
また通常の関数と同じように、引数を渡すことが出来ます。
続いて、どんな場合に使用するのか次章で考えていきます。
無名関数の使い道
無名関数はどんな時に使用して、どんなメリットがあるのでしょうか。
関数名の乱立を防ぐ
開発を進めていると、その開発規模が大きければ大きいほど関数数が多くなります。
どんな小さな機能関数にも名前を付けていると混乱の元になります。
また、重複しない関数名や機能に関係する名前を考えるのも大変です。
無名関数はその場限りしか使わないため、名前をつける必要がないので重宝します。
コールバック関数を指定できる
無名関数を使うと、コールバック関数を使用する事が出来ます。
ある関数の処理中や処理が終わってから別の関数を呼び出す時、あらかじめ別の関数を渡しておきます。
この時、関数に渡す別の関数をコールバック関数と呼びます。
無名関数のメリットについて、何となくおわかりいただけたでしょうか。
無名関数を使ってみよう
続いて、実際に無名関数を使用してみましょう。
無名関数の引数に値を渡す
以下、無名関数の引数に値を渡すサンプルコードです。
<?php // 手順1 $samurai = function($test_val){ echo($test_val. "です"); }; //手順2 $samurai("侍エンジニア");
【手順1】で変数$samuraiに無名関数を代入します。
変数$samuraiに無名関数を代入しただけでは実行されません。
【手順2】で$samuraiに代入した無名関数が実行されます。
実行の際に「侍エンジニア」という値が、無名関数に渡されます。
無名関数の中では、$test_valの中に「侍エンジニア」という値が入っています。
結果 侍エンジニアです
渡された値が、無名関数の中で処理をされて表示されることがわかりました。
無名関数の引数に関数を渡す
以下、無名関数の引数に関数(コールバック関数)を渡すサンプルコードです。
<?php // ①コールバック関数 function no_name_callback(){ return "侍エンジニア"; } // ②コールバック関数を実行する関数 function no_name($callback){ echo $callback(). "です"; } // ③関数を実行、コールバック関数を渡す no_name("no_name_callback");
①コールバック関数と、②コールバック関数を渡され処理をする関数を記述します。
③で実行となります。
結果 侍エンジニアです
コールバック関数が実行されて、値が表示されることがわかりました。
まとめ
今回は、PHPの無名関数について解説しました。
得にコールバック関数は無名関数を使用する大きなメリットです。
この機会に是非理解しておいて頂きたいです。
それでは、また。