PHP での未定義関数の呼び出し
多くの人がこのエラーに何度か遭遇しています Fatal error: Call to undefined function function_name()
。今日の記事では、このエラーを解明する方法を見つけています。しかし、この問題を解決する前に、PHP が関数を評価する方法を理解しましょう。
関数を定義して呼び出す方法はいくつかあります。それを function.php ファイルに書き込み、main.php ファイルで呼び出すとしましょう。
// function.php
<?php
namespace fooNamespace {
function foo() {
return "Calling foo"
}
}
?>
// main.php
include function.php
<?php
echo fooNamespace\foo();
?>
名前空間は、タスクを実行するために連携するクラスをグループ化することにより、より適切な管理を可能にする修飾子です。複数のクラスに同じ名前を使用できます。PHP が、コードで必要な名前空間の要素をどのように認識しているかを知ることが重要です。PHP 名前空間は、かなりの種類のファイルシステムとして機能します。ファイルシステム内のファイルにアクセスするには、次の 3つの方法があります。
fooBar.txt
などの相対ファイル名。fooDirectory/fooBar.txt
に解決されます。ここで、fooDirectory は現在ビジー状態のディレクトリです。subdirectory/fooBar.txt
などの相対パス名。fooDirectory/subdirectory/fooBar.txt
に解決されます。/main/fooBar.txt
などの絶対パス名。/main/fooBar.txt
に解決されます。
PHP の名前空間要素は、同等の原則に従います。たとえば、クラス名は次の 3つの方法で指定できます。
- 修飾されていない名前/接頭辞のないクラス名:
または、
$a = new foo();
現在の名前空間がfoo::staticmethod();
foonamespace
の場合、常にfoonamespace\foo
に解決されます。コードがグローバルな名前空間のないコードである場合、これはfoo
に解決されます。 - 修飾名/接頭辞クラス名:
または、
$a = new fooSubnamespace\foo();
現在の名前空間がfooSubnamespace\foo::staticmethod();
foonamespace
の場合、常にfoonamespace\fooSubnamespace\foo
に解決されます。コードがグローバルな名前空間のないコードである場合、これはfooSubnamespace\foo
に解決されます。 - グローバルプレフィックス演算子を使用した完全修飾名/プレフィックス名:
または、
$a = new \foonamespace\foo();
これは常に、コード\foonamespace\foo::staticmethod();
foonamespace\foo
に配置されたリテラル名に解決されます。
ここで、クラスを定義し、同じ名前空間内のクラスのメソッドを呼び出すとします。
<?php
class foo {
function barFn() {
echo "Hello foo!"
}
function bar() {
barFn();
// interpreter is confused which instance's function is called
$this->barFn();
}
}
$a = new foo();
$a->bar();
?>
$this
疑似変数には、現在のオブジェクトのメソッドとプロパティがあります。このようなことは、クラスのすべてのメンバー変数とメソッドにアクセスできるため、有益です。クラス内では、 $this->functionName()
と呼ばれます。クラスの外では、 $theclass->functionName()
と呼ばれます。
$this
は、変数の配列を含む、インタプリタが作成した PHP オブジェクト
への参照です。通常のクラスの通常のメソッド内で $this
を呼び出すと、$this
はこのメソッドが属するオブジェクトを返します。
PHP で未定義の関数を呼び出す際のエラーを解決する手順
-
ファイルが存在することを確認します。関数定義が記述されている PHP ファイルを見つけます。
-
ページ上の上記のファイルの
require
(またはinclude
)ステートメントを使用して、ファイルがインクルードされていることを確認します。require
/include
のパスが正しいことを確認してください。 -
require
ステートメントでファイル名のスペルが正しいことを確認します。 -
インクルードされたファイル内の単語を出力/エコーして、適切にインクルードされているかどうかを確認します。
-
ファイルの最後に別の関数を定義して呼び出します。
-
チェック機能が正しく閉じられています。(中かっこをトレースします)
-
クラスのメソッドを呼び出す場合は、
$this->
が記述されていることを確認してください。
Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.
LinkedIn