PHP コールバックファンクション
1. PHP コールバックファンクションとは?
コールバックファンクション(Callback Function)とは、別のファンクションにアーギュメント(引数)として渡されるファンクションのことです。
コールバックファンクションには以下の2つの形式があります:
- 名前付きファンクション(Named function) - ファンクション名をストリングとして渡します。
- アノニマスファンクション(Anonymous function) - ファンクションをインラインで定義し、アーギュメントとして渡します。
2. 名前付きファンクションをコールバックとして使用する
既存のファンクションはすべてコールバックファンクションとして利用可能です。名前付きファンクションをコールバックとして使用するには、別のファンクションのアーギュメントにファンクション名を含むストリングを渡します。
2.1 実装例
PHPの array_map() ファンクションにコールバックファンクションを渡し、アレイ内の各数値を2乗(自身を掛ける)する例です。
<?php
// 名前付きコールバックファンクションを定義
function myfunction($n) {
return($n * $n);
}
// 乗算対象のアレイ
$numbers = [1, 2, 3, 4, 5];
// array_mapに myfunction をコールバックとして使用
print_r(array_map("myfunction", $numbers));
?>3. アノニマスファンクションをコールバックとして使用する
アノニマスファンクション(匿名関数)はインラインで定義され、主に使い捨てのファンクションが必要な場面で利用されます。
以下は、アノニマスファンクションをコールバックとして渡す例です。
3.1 実装例
PHPの array_map() ファンクションのコールバックとしてアノニマスファンクションを使用します。
<?php
$numbers = [1, 2, 3, 4, 5];
// インラインでファンクションを定義して渡す
$res = array_map(function($n) {return($n * $n);}, $numbers);
print_r($res);
?>4. ユーザー定義ファンクションにおけるPHPコールバック
ユーザー定義のファンクションやメソッドも、コールバックファンクションをアーギュメントとして受け取ることができます。ユーザー定義ファンクションの内部でコールバックを実行するには、ヴァリアブル(変数)に括弧 () を付け、通常のファンクションと同様にアーギュメントを渡して呼び出します。
4.1 実装例
ユーザー定義ファンクションからコールバックを実行する例です。
<?php
// 感嘆符を付けるファンクション
function exclaim($str) {
return $str . "! ";
}
// 疑問符を付けるファンクション
function ask($str) {
return $str . "? ";
}
// フォーマットを適用して出力するファンクション
function printFormatted($str, $format) {
// $format ヴァリアブルをファンクションとして実行
echo $format($str);
}
// "exclaim" と "ask" をコールバックファンクションとして printFormatted() に渡す
printFormatted("Hello world", "exclaim");
printFormatted("Hello world", "ask");
?>