はじめに
PHPを書いていると突然出てくる「無名関数」や「use()」の使い方、ちゃんと理解していますか?
今回は、無名関数とは何か、なぜ use()
を使うのかを、なるべくシンプルなコードで解説していきます!
無名関数とは?
無名関数とは、その名の通り「名前を持たない関数」のことです。 別名「クロージャ(Closure)」とも呼ばれます。
やりたいこと
-
無名関数の意味と使い方を理解する
-
use()
の役割を知る -
クロージャの便利な使い道を学ぶ
コードスクリプト
コードスクリプトの概要
-
無名関数とは名前のない関数(=その場で定義してその場で使う)
-
use()
を使うと外側の変数を無名関数内で使える
コード例①:基本の無名関数
コード例②:use()を使う場合
実行結果
bash
こんにちは、太郎さん! 花子さん、お疲れ様です
コード解説
■ 無名関数とは?
無名関数(anonymous function)とは、その名の通り「名前を持たない関数」のことです。
ふつうの関数は function greet() {}
みたいに名前を付けますが、無名関数はこうです
$func = function () { return "Hello"; };
この関数は $func()
として呼び出せます。
■ use() の意味とは?
無名関数の中で、外の変数を使いたいときに use()
を使います。
例えばこのようなことはできません👇
$msg = “こんにちは”;
$func = function () { // echo $msg; ← これはエラー };
use()
を使えばOK!
$msg = "こんにちは"; $func = function () use ($msg) { echo $msg; // こんにちは };
補足:ファイルの先頭に書く use
とは別物!
use App\Models\Admin; use Illuminate\Support\Facades\DB;
これは「クラスやライブラリを読み込むための use
」で、 無名関数で使う use ($msg)
とはまったく意味が違います。
使い方 | 意味 |
---|---|
ファイル先頭の use |
クラスや関数の読み込み(インポート) |
無名関数の use() |
外の変数を関数内に取り込む |
よくあるパターン:配列処理と無名関数
$names = ["太郎", "花子", "次郎"]; array_map(function ($name) { echo "こんにちは、$name さん\n"; }, $names);
これも無名関数の定番の使い道です。
引数との違いは?
use()
は外の変数を取り込むので、引数で渡す方法と似ています。
use() の例:
$message = "お疲れ様です"; $name = "花子"; $notify = function () use ($message, $name) { return $name . "さん、" . $message; };
引数の例:
$message = "お疲れ様です"; $notify = function ($name) use ($message) { return $name . "さん、" . $message; }; echo $notify("花子");
何が違うの?
- 引数:呼び出し時に値を自由に渡せる → 関数の再利用性が高い
- use:外のスコープの値をそのまま使う → その場限りの使い捨てに向いてる
まとめ
無名関数は「名前のない関数」、use()
は「外の変数を使いたいとき」に使う。
Laravelでも頻出なので、今のうちにマスターしておくと後々かなり役立ちます!
コメント