Sobes.tech
Junior — Middle

Co się stanie, jeśli w podklasie wywołamy metodę, która nie jest w niej zdefiniowana, za pomocą self::?

sobes.tech AI

Odpowiedź od AI

W PHP słowo kluczowe self:: zawsze odnosi się do klasy, w której jest napisane, a nie do klasy potomnej. Jeśli w klasie pochodnej wywołasz metodę za pomocą self::, która nie jest zdefiniowana w samej klasie pochodnej, lecz w klasie rodzicielskiej, PHP spróbuje znaleźć tę metodę dokładnie w klasie pochodnej i jej nie znajdzie, co spowoduje błąd.

Przykład:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Próba wywołania foo() przez self:: w ChildClass
    }
}

ChildClass::bar(); // Błąd: Call to undefined method ChildClass::foo()

Aby wywołać metodę klasy rodzica, należy użyć parent::foo() lub static::foo(), jeśli potrzebne jest późne wiązanie statyczne.