call_user_func

関数の概要

call_user_func は、PHPで指定したコールバック関数を動的に呼び出すための関数です。関数名や配列で指定したオブジェクトのメソッドを引数として渡すことで、柔軟に処理を切り替えられます。コールバック関数を実行したい場合や、関数名が事前に決まっていない場合に便利です。

パラメータの説明

  • callable $callback:実行したい関数名、またはオブジェクトのメソッドを指定します。文字列(関数名)、配列([オブジェクト, メソッド名])、無名関数などが使えます。
  • mixed …$params:コールバック関数に渡す任意の個数の引数です。可変長引数として複数渡せます。

戻り値

コールバック関数が返す値をそのまま返します。つまり、call_user_func の戻り値は、実行されたコールバックの戻り値と同じ型・値になります。

使用例

基本的な使い方

<?php
function sayHello($name) {
    return "こんにちは、" . $name . "さん!";
}

echo call_user_func('sayHello', '太郎');
?>

この例では、関数名を文字列で渡して実行しています。結果は「こんにちは、太郎さん!」と表示されます。

オブジェクトのメソッドを呼び出す

<?php
class Greeter {
    public function greet($name) {
        return "おはようございます、" . $name . "さん!";
    }
}

$obj = new Greeter();
echo call_user_func([$obj, 'greet'], '花子');
?>

オブジェクトとメソッド名を配列にして渡すことで、そのオブジェクトのメソッドを呼び出せます。この例では「おはようございます、花子さん!」と表示されます。

無名関数を使う

<?php
$result = call_user_func(function($a, $b) {
    return $a + $b;
}, 5, 3);

echo $result;
?>

無名関数を直接渡して、引数も複数指定できます。この例では、5 + 3の計算結果「8」が返されます。

関数名を変数で指定する

<?php
$funcName = 'strtoupper';
echo call_user_func($funcName, 'hello world');
?>

関数名を変数で持っている場合でも、call_user_func なら簡単に実行できます。この例は文字列を大文字に変換し、「HELLO WORLD」と表示されます。

関連する関数

  • call_user_func_array:引数を配列で渡せるコールバック実行関数
  • is_callable:指定したコールバックが実行可能か判定する関数
  • Closure:無名関数や匿名クラスの利用に関連

まとめ

call_user_func は名前やメソッドを動的に指定してコールバック関数を実行できる便利な関数です。柔軟な関数呼び出しを実現し、特にプラグイン開発やイベントリスナーなどに役立ちます。引数が多い場合は call_user_func_array と併用するとさらに使いやすくなるため、状況に応じて使い分けると良いでしょう。