Appel à une fonction non définie en PHP

Shraddha Paghdar 21 janvier 2022
PHP
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 :

  1. Nom de fichier relatif tel que fooBar.txt. Il se résoudra en fooDirectory/fooBar.txt où fooDirectory est le répertoire actuellement occupé.
  2. Nom de chemin relatif tel que subdirectory/fooBar.txt. Il se résoudra en fooDirectory/subdirectory/fooBar.txt.
  3. 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 :

  1. Nom non qualifié/Nom de classe sans préfixe :
    $a = new foo();
    
    Ou,
    foo::staticmethod();
    
    Si l’espace de noms actuel est foonamespace, il sera toujours résolu en foonamespace\foo. Si le code est un code global, sans espace de noms, cela se résout en foo.
  2. Nom qualifié/Nom de classe préfixé :
    $a = new fooSubnamespace\foo();
    
    Ou,
    fooSubnamespace\foo::staticmethod();
    
    Si l’espace de noms actuel est foonamespace, il sera toujours résolu en foonamespace\fooSubnamespace\foo. Si le code est un code global, sans espace de noms, cela se résout en fooSubnamespace\foo.
  3. Nom complet/Nom préfixé avec opérateur de préfixe global :
    $a = new \foonamespace\foo();
    
    Ou,
    \foonamespace\foo::staticmethod();
    
    Cela se résout toujours au nom littéral présenté dans le code, 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 (ou include) pour le fichier ci-dessus sur la page. Vérifiez que le chemin dans le fichier require/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 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