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.