【PHP】クロージャ(無名関数)の使い方
-
カテゴリ:
- PHP
最近PHPでクロージャ(無名関数)を使う機会があったので、忘れないうちにことにメモしておきます。
クロージャ(無名関数)とは
クロージャとは無名関数とも呼ばれ、その名の通り名前がない関数だと自分は理解しています。
関数名は定義せず、環境を持っている関数です。ここで言う環境とは具体的に、変数と実際の処理のことです。
色々ネットでも調べてみました。
クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする
by Wikipedia クロージャ
無名関数はクロージャとも呼ばれ、 関数名を指定せずに関数を作成できるようにするものです。 コールバック パラメータとして使う際に便利ですが、用途はそれにとどまりません。
by 無名関数
やはりPHPではクロージャ=無名関数のようで、名前が定義されていない関数のことを指すようです。
クロージャの使い方
クロージャの一番簡単な例として、挨拶を返すサンプルがあります。
$aisatsu = function($val){return $val;};
echo "おはよう、{$aisatsu('太郎')}さん";
// 結果:
// おはよう、太郎さん
一行目に、「function($val)」というように名前無しで引数と内部処理だけ定義しています。
それを2行目で引数を自由に定義して利用しています。
もう少し踏み込んだ例として、以下のサンプルがあります。
$aisatsu = function($name){
if (date("H") >= 6 and date("H") <= 10) {
return "おはようございます、{$name}さん。";
} elseif (date("H") >= 11 and date("H") <= 16) {
return "こんにちは、{$name}さん。";
} else {
return "こんばんは、{$name}さん。";
}
};
//使い方
// 6時から10時の場合
echo $aisatsu('太郎');
//> 結果:おはようございます。太郎さん。
// 11時から16時の場合
echo $aisatsu('太郎');
//> 結果:こんにちは、太郎さん。
// 16時から24時、または0時から5時の場合
echo $aisatsu('太郎');
//> 結果:こんばんは、太郎さん。
関数を使った時間帯によって、返す挨拶が変化します。
クロージャのいいところは、関数を変数のように扱えるところと、何度も使いまわしできるのでソース量を少なくするのと役立ちます。
また引数としてコールバック関数を利用することも可能です。
コールバック関数を使ったサンプルも記事にしたので、ご興味あれば見てみて下さい。
投稿日:2019-07-27
更新日:2019-08-08