Llamar a una función indefinida en PHP

Shraddha Paghdar 21 enero 2022
PHP
Llamar a una función indefinida en PHP

Muchos de ustedes se han encontrado con este error varias veces Fatal error: Call to undefined function_name(). En la publicación de hoy, estamos descubriendo cómo desentrañar este error. Pero antes de resolver este problema, entendamos cómo PHP evalúa las funciones.

Hay varias formas de definir funciones y llamarlas. Digamos que lo escribe en el archivo function.php y lo llama en el archivo main.php.

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

Los espacios de nombres son calificadores que permiten una mejor gestión al agrupar clases que trabajan juntas para realizar una tarea. Le permite utilizar el mismo nombre para varias clases. Es importante saber cómo PHP sabe qué elemento del espacio de nombres requiere el código. Los espacios de nombres PHP funcionan como una especie de sistema de archivos. Hay 3 formas de acceder a un archivo en un sistema de archivos:

  1. Nombre de archivo relativo como fooBar.txt. Se resolverá en fooDirectory/fooBar.txt donde fooDirectory es el directorio actualmente ocupado.
  2. Nombre de la ruta relativa, como subdirectorio / fooBar.txt. Se resolverá en fooDirectory/subdirectory/fooBar.txt.
  3. Nombre de ruta absoluto como /main/fooBar.txt. Se resolverá en /main/fooBar.txt.

Los elementos con espacio de nombres en PHP siguen un principio equivalente. Por ejemplo, el nombre de una clase se puede especificar de tres formas:

  1. Nombre no calificado / Nombre de clase sin prefijo:
    $a = new foo();
    
    O,
    foo::staticmethod();
    
    Si el espacio de nombres actual es foonamespace, siempre se resolverá como foonamespace\foo. Si el código es un código global, sin espacios de nombres, esto se resuelve como foo.
  2. Nombre calificado / Nombre de clase con prefijo:
    $a = new fooSubnamespace\foo();
    
    O,
    fooSubnamespace\foo::staticmethod();
    
    Si el espacio de nombres actual es foonamespace, siempre se resolverá como foonamespace\fooSubnamespace\foo. Si el código es global, sin espacio de nombres, esto se resuelve en fooSubnamespace\foo.
  3. Nombre completo / nombre con prefijo con operador de prefijo global:
    $a = new \foonamespace\foo();
    
    O,
    \foonamespace\foo::staticmethod();
    
    Esto siempre se resuelve en el nombre literal establecido en el código, foonamespace\foo.

Ahora suponga que define una clase y llama al método de una clase dentro del mismo espacio de nombres.

<?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 pseudovariable $this tiene los métodos y propiedades del objeto actual. Esto es beneficioso porque le permite acceder a todas las variables miembro y métodos de la clase. Dentro de la clase, se llama $this->functionName(). Fuera de la clase, se llama $theclass->functionName().

$this es una referencia a un object PHP que el intérprete creó para usted, que contiene un array de variables. Si llama a $this dentro de un método normal en una clase normal,$this devuelve el objeto al que pertenece este método.

Pasos para resolver el error de llamar a una función no definida en PHP

  • Verifica que el archivo exista. Busque el archivo PHP en el que está escrita la definición de la función.
  • Verifique que el archivo se haya incluido usando la declaración require (o include) para el archivo anterior en la página. Verifique que la ruta en require/include sea correcta.
  • Verifica que el nombre del archivo esté escrito correctamente en la declaración require.
  • Imprime / repite una palabra en el archivo incluido para determinar si se ha incluido correctamente.
  • Definí una función separada al final del archivo y llámala.
  • Comprobar que las funciones estén cerradas correctamente. (Traza los tirantes)
  • Si estás llamando a métodos de una clase, asegúrate de que esté escrito $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