PHPの関数には無名関数と即時関数というものがあります。
僕はあまり使いません(笑)
用途があまり分かってないだけだと思います。
でも、ほかのもっと優秀な人のプログラムを見るとたまに使われているので知っていて損は無いと思います。
目次
無名関数
匿名関数や無名関数と呼ばれる関数の書き方です。
漢字が多くて分かりにくいですね!笑
クロージャやラムダ式関数とも言われます。
匿名関数は関数の定義に名前をつけず、処理を変数に格納します。
実行するときは、$myFunction() のように括弧をつけて実行します。
$hello = "こんにちは。";
$msg = function ($age) use ($hello) {
$msg = $age . "歳です。" . $hello;
return $msg;
};
echo $msg(18);
これを実行すると画面に「18歳です。こんにちは。」と表示されます。
use ($hello) は無くても大丈夫です。
親スコープにある変数を使いたい場合に使います。
即時関数
$hello = "こんにちは。";
(function($age) use ($hello) {
$msg = $age . "歳です。" . $hello;
echo $msg;
})(24);
即時関数はこのように関数名も無しに書けます。
最後の行の 24 が引数に与える値になります。
これを実行すると画面に「24歳です。こんにちは。」と表示されます。
ただしこの方法は関数のメリットである使いまわすことが出来ません。
use ($hello) は無くても大丈夫です。
親スコープにある変数を使いたい場合に使います。
$hello = "こんにちは。";
$msg = (function($age) use ($hello) {
$msg = $age . "歳です。" . $hello;
return $msg;
})(24);
echo $msg;
このように即時関数で実行した結果をreturnし、値を受け取ることも出来ます。
まとめ
PHPには通常の関数以外に無名関数と即時関数があります。
僕は必要だと思ったことが無くあまり使ったことがありません。
なので詳しいことは僕に聞かないでください(笑)










コメント