PHP での未定義関数の呼び出し

Shraddha Paghdar 2022年4月12日
PHP
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つの方法があります。

  1. fooBar.txt などの相対ファイル名。fooDirectory/fooBar.txt に解決されます。ここで、fooDirectory は現在ビジー状態のディレクトリです。
  2. subdirectory/fooBar.txt などの相対パス名。fooDirectory/subdirectory/fooBar.txt に解決されます。
  3. /main/fooBar.txt などの絶対パス名。 /main/fooBar.txt に解決されます。

PHP の名前空間要素は、同等の原則に従います。たとえば、クラス名は次の 3つの方法で指定できます。

  1. 修飾されていない名前/接頭辞のないクラス名:
    $a = new foo();
    
    または、
    foo::staticmethod();
    
    現在の名前空間が foonamespace の場合、常に foonamespace\foo に解決されます。コードがグローバルな名前空間のないコードである場合、これは foo に解決されます。
  2. 修飾名/接頭辞クラス名:
    $a = new fooSubnamespace\foo();
    
    または、
    fooSubnamespace\foo::staticmethod();
    
    現在の名前空間が foonamespace の場合、常に foonamespace\fooSubnamespace\foo に解決されます。コードがグローバルな名前空間のないコードである場合、これは fooSubnamespace\foo に解決されます。
  3. グローバルプレフィックス演算子を使用した完全修飾名/プレフィックス名:
    $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 Paghdar avatar Shraddha Paghdar avatar

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