Avatar ·

¿Cuál es la diferencia entre new self y new static en PHP? Enlace estático tardío

¡Hola a todos! Llevo tres días lidiando con una rareza en PHP. Tengo una clase base que crea sus propias instancias a través de un método estático. Cuando heredo esta clase, espero que la clase hija cree objetos de su propio tipo, pero por alguna razón se crea un objeto de la clase padre. Aquí hay un ejemplo simplificado: ```php class ParentClass { public static function create() { return new self(); } } class ChildClass extends ParentClass { // sin sobrescritura } $obj = ChildClass::create(); // $obj es ParentClass, ¡no ChildClass! echo get_class($obj); // ParentClass ``` He leído sobre el enlace estático tardío (Late Static Binding) y sobre la palabra clave `static`, pero no termino de entender cómo funciona. ¿Por qué `new self()` siempre se refiere a la clase donde está escrito este código, y no a la clase desde la que se llamó al método? ¿Y cómo hago para que `ChildClass::create()` devuelva exactamente un objeto `ChildClass`, y no `ParentClass`? Explica