Sobes.tech
Junior — Middle

Čo sa stane, ak v podtriede zavoláte metódu, ktorá v nej nie je definovaná, pomocou self::?

sobes.tech AI

Odpoveď od AI

V PHP-ju sa ključové slovo self:: vždy odkazuje na triedu, v ktorej je napísané, nie na triedu potomka. Ak v podtriede zavoláte metódu cez self::, ktorá nie je definovaná v samotnej podtriede, ale v rodičovskej triede, PHP sa pokúsi nájsť ju presne v podtriede a nenájde ju, čo povedie k chybe.

Príklad:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Pokus o zavolanie foo() cez self:: v ChildClass
    }
}

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

Na zavolanie metódy rodičovskej triedy je potrebné použiť parent::foo() alebo static::foo(), ak je požadované neskoré statické viazanie.