Sobes.tech
Junior — Middle

O que acontece se numa subclasse chamar um método que não está definido nela, usando self::?

sobes.tech IA

Resposta da IA

Em PHP, a palavra-chave self:: refere-se sempre à classe onde está escrita, e não à classe filha. Se numa subclasse chamar um método através de self::, que não está definido na própria subclasse, mas na classe pai, o PHP tentará encontrá-lo exatamente na subclasse e não o encontrará, o que levará a um erro.

Exemplo:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Tentativa de chamar foo() via self:: em ChildClass
    }
}

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

Para chamar o método da classe pai, deve-se usar parent::foo() ou static::foo(), se for necessário o enlace estático tardio.