📢 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> | ||