Sobes.tech
Back to questions
Junior — Middle
90

Можете объяснить, что такое позднее статическое связывание в PHP и в чем его отличие от других видов связки?

Answer from AI

sobes.tech AI

Позднее статическое связывание (Late Static Binding, LSB) в PHP — это механизм, который позволяет внутри статических методов и свойств класса обращаться к вызывающему классу, а не к тому, где метод был определён.

Отличие от обычного статического связывания в том, что при обычном вызове через self:: всегда используется класс, в котором метод объявлен, а при позднем статическом связывании через static:: — класс, который фактически вызвал метод (runtime-класс).

Пример:

class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();    // всегда A
        static::who();  // позднее статическое связывание
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();
// Выведет:
// A (из self::who())
// B (из static::who())

Таким образом, LSB позволяет создавать более гибкие и расширяемые классы, где поведение зависит от класса-наследника, а не только от класса-родителя.