Sobes.tech
Junior — Middle

Какво се случва, ако в подклас се извика метод, който не е дефиниран в него, чрез self::?

sobes.tech AI

Отговор от AI

В PHP ключовата дума self:: винаги се отнася за класа, в който е написана, а не за класа наследник. Ако в подклас се извика метод чрез self::, който не е дефиниран в самия подклас, а е дефиниран в родителския клас, PHP ще се опита да го намери точно в подкласa и няма да го намери, което ще доведе до грешка.

Пример:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Опит за извикване на foo() чрез self:: в ChildClass
    }
}

ChildClass::bar(); // Грешка: Call to undefined method ChildClass::foo()

За да извикате метода на родителския клас, трябва да използвате parent::foo() или static::foo(), ако е необходимо късно статично свързване.