call_user_func_array

関数の概要

call_user_func_array は、PHPの組み込み関数で、コールバック関数やメソッドを配列形式で指定した引数とともに呼び出す際に使われます。複数の引数を配列でまとめて渡せるため、動的に関数呼び出しを行いたい場合に便利です。特に、引数の数が可変である場合や、配列で引数を管理している場合に活躍します。

パラメータの説明

  • callback:呼び出したい関数やメソッドを指定します。関数名の文字列、またはオブジェクトとメソッド名の配列(例: [$obj, 'methodName'])などが利用可能です。
  • param_arr:コールバック関数に渡す引数を含んだ配列です。配列内の要素が順番に引数として展開されます。

戻り値

指定したコールバック関数の戻り値をそのまま返します。コールバック関数が戻り値を返さない場合は NULL になります。

使用例

基本的な使い方

<?php
function sum($a, $b) {
    return $a + $b;
}

$result = call_user_func_array('sum', [2, 3]);
echo $result; // 5
?>

この例では、関数 sum を配列で渡した引数(2 と 3)で呼び出しています。結果は 5 と表示されます。

メソッドを呼び出す例

<?php
class Calculator {
    public function multiply($x, $y) {
        return $x * $y;
    }
}

$calc = new Calculator();
$result = call_user_func_array([$calc, 'multiply'], [4, 5]);
echo $result; // 20
?>

オブジェクトのメソッドをコールバックとして呼ぶ場合も、配列でオブジェクトとメソッド名を指定し、引数を配列で渡せば実行できます。

可変長引数を配列で渡す例

<?php
function concatenate(...$strings) {
    return implode('-', $strings);
}

$args = ['PHP', 'is', 'fun'];
echo call_user_func_array('concatenate', $args); // PHP-is-fun
?>

可変長引数を使った関数にも対応可能で、任意の数の引数を配列から展開して関数に渡せます。

関連する関数

  • call_user_func — 可変長の引数をカンマ区切りで指定してコールバックを実行する
  • is_callable — 指定した関数やメソッドが呼び出し可能かどうかを判定する
  • func_get_args — 呼び出し関数内で渡された引数の配列を取得する
  • array_map — 配列の各要素にコールバック関数を適用する

まとめ

call_user_func_array は、配列で渡した引数を展開してコールバック関数やメソッドを動的に実行したい場合に便利な関数です。関数名を文字列や、オブジェクトとメソッド名の配列で指定でき、実務でも可変長引数の処理や動的メソッド呼び出しでよく使われます。引数を配列でまとめて管理したい場合や、動的に関数を呼び出す場面で活用してみてください。