Aufruf einer undefinierten Funktion in PHP

Shraddha Paghdar 21 Januar 2022
PHP
Aufruf einer undefinierten Funktion in PHP

Viele von Ihnen sind mehrmals auf diesen Fehler gestoßen Fatal error: Call to undefined function function_name(). Im heutigen Beitrag finden wir heraus, wie man diesen Fehler aufklärt. Aber bevor wir dieses Problem lösen, wollen wir verstehen, wie PHP die Funktionen auswertet.

Es gibt mehrere Möglichkeiten, Funktionen zu definieren und aufzurufen. Nehmen wir an, Sie schreiben es in die Datei function.php und rufen es in der Datei main.php auf.

    // function.php
<?php
    namespace fooNamespace {
        function foo() {
            return "Calling foo"
        }
    }
?>
    // main.php
include function.php
<?php
    echo fooNamespace\foo();
?>

Namespaces sind Qualifizierer, die eine bessere Verwaltung ermöglichen, indem Klassen gruppiert werden, die zusammenarbeiten, um eine Aufgabe auszuführen. Es ermöglicht Ihnen, denselben Namen für mehrere Klassen zu verwenden. Es ist wichtig zu wissen, woher PHP weiß, welches Element des Namensraums vom Code benötigt wird. PHP-Namespaces funktionieren wie ein Dateisystem. Es gibt 3 Möglichkeiten, auf eine Datei in einem Dateisystem zuzugreifen:

  1. Relativer Dateiname wie fooBar.txt. Es wird in fooDirectory/fooBar.txt aufgelöst, wobei fooDirectory das aktuell belegte Verzeichnis ist.
  2. Relativer Pfadname wie Unterverzeichnis/fooBar.txt. Es wird in fooDirectory/subdirectory/fooBar.txt aufgelöst.
  3. Absoluter Pfadname wie /main/fooBar.txt. Es wird in /main/fooBar.txt aufgelöst.

Namespaced-Elemente in PHP folgen einem gleichwertigen Prinzip. Ein Klassenname kann beispielsweise auf drei Arten angegeben werden:

  1. Unqualifizierter Name/Klassenname ohne Präfix:
    $a = new foo();
    
    Oder,
    foo::staticmethod();
    
    Wenn der aktuelle Namespace foonamespace ist, wird er immer in foonamespace\foo aufgelöst. Wenn der Code ein globaler Code ohne Namensraum ist, wird dieser in foo aufgelöst.
  2. Qualifizierter Name/Klassenname mit Präfix:
    $a = new fooSubnamespace\foo();
    
    Oder,
    fooSubnamespace\foo::staticmethod();
    
    Wenn der aktuelle Namespace foonamespace ist, wird er immer in foonamespace\fooSubnamespace\foo aufgelöst. Wenn der Code globaler Code ohne Namensraum ist, wird dieser in fooSubnamespace\foo aufgelöst.
  3. Vollqualifizierter Name/Name mit Präfix mit globalem Präfix-Operator:
    $a = new \foonamespace\foo();
    
    Oder,
    \foonamespace\foo::staticmethod();
    
    Dies wird immer in den im Code angegebenen literalen Namen aufgelöst, foonamespace\foo.

Angenommen, Sie definieren eine Klasse und rufen die Methode einer Klasse innerhalb desselben Namensraums auf.

<?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();
?>

Die Pseudovariable $this hat die Methoden und Eigenschaften des aktuellen Objekts. Dies ist von Vorteil, da Sie auf alle Membervariablen und Methoden der Klasse zugreifen können. Innerhalb der Klasse heißt es $this->functionName(). Außerhalb der Klasse heißt es $theclass->functionName().

$this ist eine Referenz auf ein PHP-Objekt, das der Interpreter für Sie erstellt hat und das ein Array von Variablen enthält. Wenn Sie $this innerhalb einer normalen Methode in einer normalen Klasse aufrufen, gibt $this das Objekt zurück, zu dem diese Methode gehört.

Schritte zum Beheben des Fehlers beim Aufrufen einer undefinierten Funktion in PHP

  • Überprüfen Sie, ob die Datei existiert. Suchen Sie die PHP-Datei, in die die Funktionsdefinition geschrieben ist.
  • Überprüfen Sie, ob die Datei eingebunden wurde, indem Sie die Anweisung require (oder include) für die obige Datei auf der Seite verwenden. Überprüfen Sie, ob der Pfad in der Anforderung/Einfügung korrekt ist.
  • Überprüfen Sie, ob der Dateiname in der require-Anweisung richtig geschrieben ist.
  • Drucken/echo ein Wort in der eingeschlossenen Datei, um zu überprüfen, ob es richtig eingeschlossen wurde.
  • Definiert eine eigene Funktion am Ende der Datei und ruft sie auf.
  • Prüfen Sie, ob die Funktionen richtig geschlossen sind. (Verfolge die Klammern)
  • Wenn Sie Methoden einer Klasse aufrufen, stellen Sie sicher, dass $this-> geschrieben ist.
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