Что будет при вызове отсутствующего метода в потомке с помощью static::?

«Что будет при вызове отсутствующего метода в потомке с помощью static::?» — вопрос из категории ООП, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При вызове static::отсутствующийМетод() PHP попытается разрешить вызов метода, используя позднее статическое связывание. Это означает, что поиск метода начнется с класса, на который указывает static (обычно это класс, из которого был сделан вызов), и будет подниматься по цепочке наследования. Если метод не будет найден ни в текущем классе, ни в его родителях, будет выброшена фатальная ошибка.

Пример на PHP:

class ParentClass {
    public static function test() {
        // static ссылается на класс, который вызвал test()
        static::missingMethod(); // Ищет missingMethod в вызывающем классе
    }
}

class ChildClass extends ParentClass {}

ChildClass::test();
// Вывод: Fatal error: Uncaught Error: Call to undefined method ChildClass::missingMethod()

Практический совет: Перед вызовом через static:: стоит проверять существование метода:

if (method_exists(static::class, 'methodName')) {
    static::methodName();
}