es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema de PHP 8.1.1 con el Método __toString() – causando “Clase no encontrada” si se crea una instancia antes de la declaración de la clase en sí misma.

Tengo un problema después de actualizar de PHP 7.3 a 8.1.1. Hay mucho por hacer, por supuesto, pero esto es bastante extraño. Este ejemplo no funciona para mí y muestra el error: Error fatal:

Error no capturado: Clase “TestC” no encontrada en C:\xampp81\htdocs\helpdesk811\test81\index.php:2 Trace de pila: #0 {main} lanzado en C:\xampp81\htdocs\helpdesk811\test81\index.php en la línea 2

$a = new TestC;
echo $a->a;
class TestC
{
    public $a = "un_valor";
    public $b;
    public function __toString()
    {
        return "cadena";
    }
}

Si defino la clase y creo una instancia después, funciona, pero no pude encontrar ninguna documentación sobre este comportamiento. Es lo mismo con un método estático (public static function foo(){echo “bar”;}).

Probé el sandbox de 3v4l.org y funciona en versiones mayores a 5.0 y menores a 8.0.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que después de actualizar de PHP 7.3 a PHP 8.1.1, hay un problema con el código proporcionado en el ejemplo. El mensaje de error menciona que la clase “TestC” no se encuentra, lo que causa un error fatal. Es posible que esto se deba a cambios en la forma en que PHP 8.1.1 maneja las clases y los métodos.

    Una solución alternativa que parece funcionar es definir la clase y crear una instancia más tarde, en lugar de crear la instancia inmediatamente después de definir la clase. Este comportamiento no está documentado, por lo que no está claro si se trata de un error o de un comportamiento deseado.

    Vale la pena mencionar que el código proporcionado funciona en versiones mayores a 5.0 y menores a 8.0, según pruebas realizadas en el sandbox de 3v4l.org. Sería útil investigar cualquier cambio en PHP 8.1.1 que pueda causar este problema y actualizar el código en consecuencia.

Comments are closed.