オーダーメイドコース
icon
icon

PHPでラムダ式で関数を書く方法【初心者向け】

初心者向けにPHPでラムダ式で関数を書く方法について解説しています。変数に関数を代入して柔軟に使えるようになりましょう。実際にソースコードを書いて説明しているので、ぜひ書きながら理解していきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

PHPでラムダ式で関数を書く方法について解説します。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでラムダ式で関数を書く方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

ラムダ関数、無名関数とは

PHPのバージョン5.2以前までは、関数の引数に関数(コールバック関数)を渡すということができませんでした。

例えばarray_map( )のように引数にコールバック関数を必要とする場合には、「コールバックする定義済みの関数名」または「create_function( )で生成した匿名関数」を指定する必要がありました。

「コールバックする定義済みの関数名」を指定する場合は、グローバルスコープに関数を定義する必要があり、再利用する可能性が低い関数も定義する必要があることがスマートではありません。

「create_function( )で生成した匿名関数」では実処理を文字列で第2引数に指定する必要があり、可読性・保守性の面から非常に使いづらく、バージョン7.2からは非推奨の関数となっています。

上記の問題を解決する機能として、バージョン5.3からラムダ関数・無名関数が導入されました。

PHPではラムダ関数と無名関数の明確な違いはなく、基本的には同じ概念として扱われています。

簡単に説明すると、関数名を定義せずに引数・処理内容だけを定義できる機能です。

また、無名関数で定義した関数を変数に格納でき、それをarray_map()などの引数にそのまま渡すことができます。変数に格納せずとも引数に渡す時点で無名関数を定義することも可能で、再利用しない処理などの場合はこの方法でコールバックを指定します。

 

参考URL

php.net-array-map
php.net-create-function

 

ラムダ関数の書き方

通常の関数は下記の構文で定義します。

function 関数名(引数1, 引数2) {
・・・処理内容・・・
}

利用する際には関数名を指定して呼び出して、必要ならば引数を渡します。

$arg1 = 1;
$arg2 = true;
関数名($arg1, $arg2);

ラムダ関数は下記のように定義・変数格納・呼び出しが行えます。

// 定義・変数格納
$変数名 = function(引数1, 引数2) {
・・・処理内容・・・
}

$arg1 = 1;
$arg2 = true;

// 呼び出し
$変数名($arg1, $arg2);

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

①ラムダ関数を「定義・変数に格納・呼び出し」を行ってみよう!

// 「定義・変数に格納」を行う
$lambda_func = function($arg) {
    echo $arg;
};
// 「呼び出し」を行う
// ■実行結果
// 引数
$lambda_func('引数');

②ラムダ関数をコールバック関数として引数に渡してみよう!

// ■実行結果
// 1
// 2
// 3
$array = [1, 2, 3];
array_map($lambda_func, $array);

③ラムダ関数を変数に格納せずに、引数に渡す際に定義してみよう!

// ■実行結果
// 1
// 2
// 3
array_map(function($arg) {
    echo $arg;
}, $array);

 

この記事を監修してくれた方

青木 敦史(あおきあつし)
昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。