Day 0・Laravelを読むための最低限PHP
関数・無名関数・アロー関数 — 処理を渡す考え方
関数の定義、引数と戻り値、無名関数(クロージャ)、アロー関数、そして「処理を値として渡す」コールバックの考え方を理解する。
関数とは「名前を付けた処理のまとまり」
関数とは、いくつかの処理をひとまとめにして名前を付けたものです。一度定義すれば、その名前を呼ぶだけで何度でも同じ処理を実行できます。関数には「引数(ひきすう)」という入り口から値を渡し、「戻り値(もどりち)」という出口から結果を受け取ります。自動販売機に例えると、お金を入れる(引数)と、飲み物が出てくる(戻り値)イメージです。
<?php
// function 関数名(引数) { 処理; return 戻り値; }
function add($a, $b)
{
return $a + $b; // return で結果を呼び出し元に返す
}
$result = add(3, 5); // 引数として 3 と 5 を渡す
echo $result; // → 8なぜ return が要るのか
echo は「その場で画面に出す」だけで、値を後で使うことはできません。return は「計算した結果を呼び出し元に持ち帰る」ための命令です。結果を変数に入れたり、別の処理に渡したりしたいときは return が必要になります。Laravelのコントローラも最後に return でレスポンスを返すので、この考え方は必ず出てきます。
無名関数(クロージャ)— 名前のない使い捨ての関数
関数の中には「その場で1回だけ使いたいから、名前を付けるまでもない」ものがあります。そういう名前のない関数を「無名関数」または「クロージャ」と呼びます。書き方は「function() { ... }」のように、function の後ろに名前を書かないだけです。そして重要なのは、この無名関数を「変数に入れたり、別の関数に引数として渡せる」という点です。
<?php
// 無名関数(クロージャ)を変数に入れる
$greet = function ($name) {
return "こんにちは $name さん";
};
echo $greet("田中"); // → こんにちは 田中 さん(変数を関数のように呼べる)無名関数の中でも「1つの式を返すだけ」の短いものは、アロー関数という省略記法でもっと短く書けます。「fn(引数) => 式」の形で、矢印「=>」の右の式の結果がそのまま戻り値になります(return を書きません)。次の対比で、同じ処理が無名関数とアロー関数でどれだけ短くなるかを見てください。
無名関数(やや長い)
<?php
$double = function ($x) {
return $x * 2;
};
echo $double(4); // → 8アロー関数(同じ意味を短く)
<?php
$double = fn($x) => $x * 2; // fn と => で完結。return 不要
echo $double(4); // → 8コールバック — 処理そのものを引数として渡す
無名関数やアロー関数が便利なのは「処理を値のように、別の関数へ引数として渡せる」からです。こうして渡される関数を「コールバック」と呼びます。「どう繰り返すか」は既存の仕組みに任せ、「各要素に何をするか」だけを自分の関数として渡す、という分担ができます。
<?php
$numbers = [1, 2, 3, 4];
// array_map(コールバック, 配列):各要素にコールバックを適用した新しい配列を返す
$doubled = array_map(fn($n) => $n * 2, $numbers);
print_r($doubled); // → [2, 4, 6, 8]Laravelではこう出てくる
Laravelのルーティング(どのURLでどの処理を動かすかの定義)は、まさに「無名関数をコールバックとして渡す」形で書かれます。下の Route::get の第2引数がクロージャです。今日の「処理を関数として渡す」考え方がそのまま使われています(:: の意味はレッスン4で学びます)。
<?php
// Laravelのルート定義 routes/web.php
Route::get("/hello", function () {
return "Hello World"; // このクロージャが /hello にアクセスされたときに実行される
});
// コレクション操作でもクロージャ/アロー関数を渡す
$names = collect(["tanaka", "suzuki"])->map(fn($n) => strtoupper($n));読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
アロー関数「fn($x) => $x * 2」について正しい説明はどれか。
「コールバック」とは何を指すか。
無名関数(クロージャ)やアロー関数がLaravelで多用される理由を、コールバックという言葉を使って説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。