Sobes.tech
Junior — Middle

Ce se întâmplă dacă într-o subclasă se apelează o metodă care nu este definită în ea, folosind self::?

sobes.tech AI

Răspuns de la AI

În PHP, cuvântul cheie self:: face întotdeauna referire la clasa în care este scris, nu la clasa copil. Dacă într-o subclasă se apelează o metodă prin self::, care nu este definită în subclasă însă în clasa părinte, PHP va încerca să o găsească exact în subclasă și nu o va găsi, ceea ce va duce la o eroare.

Exemplu:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Încercare de a apela foo() prin self:: în ChildClass
    }
}

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

Pentru a apela metoda clasei părinte, trebuie folosit parent::foo() sau static::foo(), dacă este necesară legătura statică întârziată.