Appel à une fonction non définie en PHP
Beaucoup d’entre vous ont rencontré cette erreur à plusieurs reprises Fatal error: Call to undefined function function_name()
. Dans le post d’aujourd’hui, nous découvrons comment démêler cette erreur. Mais avant de résoudre ce problème, comprenons comment PHP évalue les fonctions.
Il existe plusieurs façons de définir des fonctions et de les appeler. Disons que vous l’écrivez dans le fichier function.php et que vous l’appelez dans le fichier main.php.
// function.php
<?php
namespace fooNamespace {
function foo() {
return "Calling foo"
}
}
?>
// main.php
include function.php
<?php
echo fooNamespace\foo();
?>
Les espaces de noms sont des qualificatifs qui permettent une meilleure gestion en regroupant des classes qui fonctionnent ensemble pour effectuer une tâche. Il vous permet d’utiliser le même nom pour plusieurs classes. Il est important de savoir comment PHP sait quel élément de l’espace de noms est requis par le code. Les espaces de noms PHP fonctionnent comme un système de fichiers. Il existe 3 manières d’accéder à un fichier dans un système de fichiers :
- Nom de fichier relatif tel que
fooBar.txt
. Il se résoudra enfooDirectory/fooBar.txt
où fooDirectory est le répertoire actuellement occupé. - Nom de chemin relatif tel que
subdirectory/fooBar.txt
. Il se résoudra enfooDirectory/subdirectory/fooBar.txt
. - Nom de chemin absolu tel que
/main/fooBar.txt
. Il se résoudra en/main/fooBar.txt
.
Les éléments avec espace de noms en PHP suivent un principe équivalent. Par exemple, un nom de classe peut être spécifié de trois manières :
- Nom non qualifié/Nom de classe sans préfixe :
Ou,
$a = new foo();
Si l’espace de noms actuel estfoo::staticmethod();
foonamespace
, il sera toujours résolu enfoonamespace\foo
. Si le code est un code global, sans espace de noms, cela se résout enfoo
. - Nom qualifié/Nom de classe préfixé :
Ou,
$a = new fooSubnamespace\foo();
Si l’espace de noms actuel estfooSubnamespace\foo::staticmethod();
foonamespace
, il sera toujours résolu enfoonamespace\fooSubnamespace\foo
. Si le code est un code global, sans espace de noms, cela se résout enfooSubnamespace\foo
. - Nom complet/Nom préfixé avec opérateur de préfixe global :
Ou,
$a = new \foonamespace\foo();
Cela se résout toujours au nom littéral présenté dans le code,\foonamespace\foo::staticmethod();
foonamespace\foo
.
Supposons maintenant que vous définissiez une classe et appeliez la méthode d’une classe dans le même espace de noms.
<?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();
?>
La pseudo-variable $this
a les méthodes et les propriétés de l’objet courant. Une telle chose est bénéfique car elle vous permet d’accéder à toutes les variables membres et méthodes de la classe. A l’intérieur de la classe, il s’appelle $this->functionName()
. En dehors de la classe, il s’appelle $theclass->functionName()
.
$this
est une référence à un objet
PHP que l’interpréteur a créé pour vous, qui contient un tableau de variables. Si vous appelez $this
à l’intérieur d’une méthode normale dans une classe normale, $this
renvoie l’objet auquel cette méthode appartient.
Étapes pour résoudre l’erreur d’appel à une fonction non définie en PHP
-
Vérifiez que le fichier existe. Recherchez le fichier PHP dans lequel la définition de la fonction est écrite.
-
Vérifiez que le fichier a été inclus à l’aide de l’instruction
require
(ouinclude
) pour le fichier ci-dessus sur la page. Vérifiez que le chemin dans le fichierrequire
/include
est correct. -
Vérifiez que le nom du fichier est correctement orthographié dans l’instruction
require
. -
Imprimer/écho un mot dans le fichier inclus pour vérifier s’il a été correctement inclus.
-
Définir une fonction distincte à la fin du fichier et l’appeler.
-
Vérifiez que les fonctions sont correctement fermées. (Tracer les accolades)
-
Si vous appelez des méthodes d’une classe, assurez-vous que
$this->
est écrit.
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