【PHP】Fatal error: Call to undefined function f() の原因と対処

Fatal error: Call to undefined functionエラーの原因と対処方法について解説します。

本エラーは「未定義の関数を呼び出している」という趣旨のエラーです。

このようなエラーが発生する原因は複数存在し、それぞれ異なる対処が必要となります。

目次

スポンサーリンク
スポンサーリンク

未定義の関数を呼び出している

呼び出し対象の関数が定義されていないような場合に当エラーが発生します。

function f() { echo 'ok'; }
f(); // "ok"
g(); // Fatal error: Call to undefined function g() in a.php on line 3

呼び出し対象の関数がきちんと定義されているかどうかを確認する必要があります。

関数名の記述ミスやタイプミスにも注意してください。

また必要なライブラリやファイルがinclude/require文などできちんと読み込まれているかどうかを確認してみましょう。

またマルチバイト文字列用のモジュール(mbstring)が無効化されてしまっているような場合には、mb_で始まる関数が利用できなくなり、今回のようなエラーが発生する要因となります。

可変関数を利用した際のエラー

可変関数の利用時に、呼び出し対象の関数が存在しなかった場合にも、同様のエラーが発生します。

function f() { echo 'ok'; }

$f = 'f';
$f(); // "ok"

$f = 'g';
$f(); // Fatal error: Call to undefined function g() in a.php on line 7

$f = '';
$f(); // Fatal error: Call to undefined function () in a.php on line 10

メソッド内で関数を呼び出そうとしている

クラスのメソッド内で誤って「メソッド」ではなく「関数」を呼び出してしまっているようなケースに注意してください。

class T {
  function f() { echo 'ok'; }
  function g() {
    f(); // Fatal error: Call to undefined function f() in a.php on line 4
         // `f()`はメソッド呼び出しではなく関数呼び出し
         // グローバル関数などを参照してしまう
  }
}

メソッド内で異なるメソッドを呼び出したい場合には、$this->メソッド名()記法を用いて、明示的にメソッドを呼び出す必要があります。

class T {
  function f() { echo 'ok'; }
  function g() {
    $this->f(); // メソッドを明示的に呼び出す
  }
}

echoやprintなどの文を関数として扱おうとしている

echo, print, isset(), empty()などの特殊な言語機能は、関数ではないため、それらの文を関数として扱ってしまった場合には、今回と同等のエラーが発生する原因となります。

$f = 'echo';
$f('hello'); // Fatal error: Call to undefined function echo() in a.php on line 2
call_user_func('print', 'world'); // Warning: call_user_func() expects parameter 1 to be a valid callback, function 'print' not found or invalid function name in a.php on line 3

この場合は、文をラップした別名の関数や無名関数を用いて対処する必要があります。

$f = function ($v) { echo $v; };
$f('hello'); // "hello"
call_user_func(function ($v) { print($v); }, 'world'); // "world"
広告