Sobes.tech
Junior — Middle

¿Qué sucede si en una subclase se llama a un método que no está definido en ella, mediante una llamada con self::?

sobes.tech AI

Respuesta de la IA

En PHP, la palabra clave self:: siempre hace referencia a la clase en la que está escrita, no a la clase hija. Si en una subclase se llama a un método mediante self::, que no está definido en la propia subclase, sino en la clase padre, PHP intentará encontrar ese método exactamente en la subclase y no lo encontrará, lo que provocará un error.

Ejemplo:

class ParentClass {
    public static function foo() {
        echo "Parent foo";
    }
}

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Intento de llamar a foo() mediante self:: en ChildClass
    }
}

ChildClass::bar(); // Error: Call to undefined method ChildClass::foo()

Para llamar al método de la clase padre, se debe usar parent::foo() o static::foo(), si se requiere enlace estático tardío.