📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

182行目: 182行目:
   }
   }
  ?>
  ?>
</syntaxhighlight>
<br><br>
== コールバック関数 ==
コールバック関数の定義を以下に示す。<br>
* 関数の引数としてcallable型を指定。
* 文字列で関数名を渡す。
* 既存の関数を参照として渡す。
<br>
コールバック関数のメリットを以下に示す。<br>
* コードの再利用性が高まる。
* 柔軟な処理の実装が可能
* コードの可読性が向上する。
<br>
使用場面を以下に示す。<br>
* 配列操作
*: array_map関数、array_filter関数、array_reduce関数
* イベントハンドラ
* コールバックベースのAPI
* データの変換や加工
<br>
<syntaxhighlight lang="php">
function processNumbers(array $numbers, callable $callback)
{
    $result = [];
    foreach ($numbers as $number) {
      $result[] = $callback($number);
    }
    return $result;
}
// コールバック関数の定義
function double($n)
{
    return $n * 2;
}
</syntaxhighlight>
<br>
<syntaxhighlight lang="php">
// コールバック関数の使用例
$numbers = [1, 2, 3, 4, 5];
$doubled = processNumbers($numbers, 'double');
print_r($doubled); // [2, 4, 6, 8, 10]
</syntaxhighlight>
<br><br>
== ラムダ式 (無名関数) ==
ラムダ式 (無名関数) の特徴を以下に示す。<br>
* <u>function() {}</u>構文を使用する。
* 変数に代入可能である。
* その場で定義して使用できる。
* <code>use</code>キーワードで外部のスコープの変数を取り込める。
<br>
<syntaxhighlight lang="php">
// ラムダ式 (無名関数) の例
$triple = function($n) {
    return $n * 3;
};
// 一般的なラムダ式の使用
$tripled = processNumbers($numbers, $triple);
print_r($tripled);  // 出力 : [3, 6, 9, 12, 15]
// インラインでのラムダ式の使用
$squared = processNumbers($numbers, function($n) {
    return $n * $n;
});
print_r($squared); // [1, 4, 9, 16, 25]
</syntaxhighlight>
<br>
以下の例では、useキーワードを使用したクロージャを定義している。<br>
<syntaxhighlight lang="php">
$multiplier = 4;
$multiplied = processNumbers($numbers, function($n) use ($multiplier) {
    return $n * $multiplier;
});
print_r($multiplied);  // 出力 : [4, 8, 12, 16, 20]
</syntaxhighlight>
<br>
以下の例では、array_map関数の引数としてラムダ式を使用している。<br>
ラムダ式の部分をコールバック関数として使用することもできる。<br>
<syntaxhighlight lang="php">
// 配列操作の実践的な例
$users = [
    ['name' => 'Tanaka', 'age' => 25],
    ['name' => 'Suzuki', 'age' => 30],
    ['name' => 'Sato',  'age' => 20]
];
// array_map関数でラムダ式を使用
$names = array_map(function($user) {
    return $user['name'];
}, $users);
print_r($names);  // 出力 : ['Tanaka', 'Suzuki', 'Sato']
// array_filter関数でコールバックを使用
$adults = array_filter($users, function($user) {
    return $user['age'] >= 25;
});
print_r($adults);  // 25歳以上のみ出力
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>