【PHP】Fatal error: Function name must be a string の原因と対処

Fatal error: Function name must be a stringエラーの原因とその対処方法について解説します。

本エラーは「関数名は文字列でなければならない」という趣旨の致命的なエラーメッセージですが、このようなエラーが発生する原因や要因は複数あります。

目次

関数名にドル記号を記述していることが原因

まず、本エラーは以下のような、変数名と丸括弧を用いた特殊な関数呼び出し形式($変数名())を用いた際に発生します。

$f(); // Fatal error: Function name must be a string in a.php on line 1

一般的な関数呼び出しを行う際には、ドル記号($)を用いずに、関数名()の形式で関数呼び出しを行う必要があります。

function f() {
   echo "ok";
}

f();  // "ok"
$f(); // Fatal error: Function name must be a string in a.php on line 6

文字列以外のオブジェクトに対する関数呼び出しが原因

PHPでは、文字列に対する関数呼び出しを行うことができるのですが、

$f = 'strlen';
echo $f('abc'); // "3"
                // strlen('abc') 呼び出しと同義

逆に文字列以外のオブジェクトに対して丸括弧を用いた関数呼び出しを行った場合には、今回のようなエラーが発生してしまいます。

$f = 0;
$f(); // Fatal error: Function name must be a string in a.php on line 2

変数の値がNULLや未定義だった場合にも、同様のエラーが発生します。空の値に対する関数呼び出しは、次項のようなケースで陥りやすい問題でもあるため注意してください。

変数やコールバック関数が空の状態になっていることが原因

仮引数などに渡された無名関数やコールバック関数がNULLや空文字の状態だった場合にも、今回のようなエラーが発生します。

function call($callback) {
   $callback();
}

call(NULL); // Fatal error: Function name must be a string in a.php on line 5
call("");   // Fatal error: Call to undefined function () in a.php on line 6

空の変数やコールバック関数を呼び出す可能性がある場合には、対策として、事前にNULLチェックや空文字のチェックを行っておくことも有効です。

function call($callback) {
   if ($callback) { $callback(); }
}

call(NULL);      // SAFE
call("");        // SAFE
call('phpinfo'); // "PHP Version => ..."(以下省略)
call(function () { echo 'ok'; }); // "ok"
広告