Saltar al contenido

Llamada PHP a función indefinida

Solución:

Cómo reproducir el error y cómo solucionarlo:

  1. Pon este código en un archivo llamado p.php:

    <?php
    class yoyo{
        function salt(){
        }
        function pepper(){
            salt();
        }
    }
    $y = new yoyo();
    $y->pepper();
    ?>
    
  2. Ejecútelo así:

    php p.php
    
  3. Obtenemos el error:

    PHP Fatal error:  Call to undefined function salt() in 
    /home/el/foo/p.php on line 6
    
  4. Solución: use $this->salt(); en lugar de salt();

    Así que hazlo así en su lugar:

    <?php
    class yoyo{
        function salt(){
        }
        function pepper(){
            $this->salt();
        }
    }
    $y = new yoyo();
    $y->pepper();
    
    ?>
    

Si alguien pudiera publicar un enlace sobre por qué $ this debe usarse antes de las funciones PHP dentro de las clases, sí, sería genial.

Este fue un error del desarrollador: una llave final mal colocada, lo que hizo que la función anterior fuera un función anidada.

Veo muchas preguntas relacionadas con el error de función indefinido en SO. Permítanme anotar esto como respuesta, en caso de que alguien más tenga el mismo problema con alcance de la función.

Cosas que intenté solucionar primero:

  1. Se buscó el archivo php con la definición de función en él. Verificado que el archivo existe.
  2. Verificó que el exigir (o incluir) para el archivo anterior existe en la página. Además, verificó la ruta absoluta en el requerir / incluir es correcto.
  3. Verificado que el nombre del archivo esté escrito correctamente en la declaración require.
  4. Repitió una palabra en el archivo incluido, para ver si se ha incluido correctamente.
  5. Definió una función separada al final del archivo y la llamó. También funcionó.

Era difícil rastrear las llaves, ya que las funciones eran muy largas, problema con los sistemas heredados. Otros pasos para solucionar problemas fueron los siguientes:

  1. Ya definí una función de impresión simple al final del archivo incluido. Lo moví justo encima de la “función indefinida”. Eso también lo hizo indefinido.
  2. Identificó esto como un problema de alcance.

  3. Usé la función de colapso de Netbeans (plegado de código) para verificar la función justo encima de esta. Entonces, la función de 1000 líneas anterior simplemente colapsó junto con esta, lo que la convierte en una función anidada.

  4. Una vez identificado el problema, cortó y pegó la función hasta el final del archivo, lo que resolvió el problema.

Muchas veces el problema viene porque php no admite etiquetas abiertas cortas en php.ini archivo, es decir:

<?
   phpinfo();
?>

Debes usar:

<?php
   phpinfo();
?>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *