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:
- Relativer Dateiname wie
fooBar.txt
. Es wird infooDirectory/fooBar.txt
aufgelöst, wobei fooDirectory das aktuell belegte Verzeichnis ist. - Relativer Pfadname wie
Unterverzeichnis/fooBar.txt
. Es wird infooDirectory/subdirectory/fooBar.txt
aufgelöst. - 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:
- Unqualifizierter Name/Klassenname ohne Präfix:
Oder,
$a = new foo();
Wenn der aktuelle Namespacefoo::staticmethod();
foonamespace
ist, wird er immer infoonamespace\foo
aufgelöst. Wenn der Code ein globaler Code ohne Namensraum ist, wird dieser infoo
aufgelöst. - Qualifizierter Name/Klassenname mit Präfix:
Oder,
$a = new fooSubnamespace\foo();
Wenn der aktuelle NamespacefooSubnamespace\foo::staticmethod();
foonamespace
ist, wird er immer infoonamespace\fooSubnamespace\foo
aufgelöst. Wenn der Code globaler Code ohne Namensraum ist, wird dieser infooSubnamespace\foo
aufgelöst. - Vollqualifizierter Name/Name mit Präfix mit globalem Präfix-Operator:
Oder,
$a = new \foonamespace\foo();
Dies wird immer in den im Code angegebenen literalen Namen aufgelöst,\foonamespace\foo::staticmethod();
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
(oderinclude
) 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 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