Позднее статическое связывание в PHP (static) позволяет ссылаться на вызванный класс в контексте наследования, что решает проблему ссылки на родительский класс (self).
Проблема возникает, когда внутри родительского класса используется self::, который при вызове из дочернего класса все равно ссылается на родительский класс. Это противоречит ожиданию, что ссылка будет на текущий, дочерний класс.
Пример использования self:: и поведения:
php
Здесь self::кто_я() внутри ParentClass::кто_вызван() продолжает ссылаться на ParentClass, даже когда метод вызывается через ChildClass.
Для решения этой проблемы используется static::. Это называется поздним статическим связыванием, потому что связывание происходит во время выполнения, а не компиляции.
Пример использования static:: для решения проблемы:
php
Теперь static::кто_я() внутри ParentClassCorrected::кто_вызван() ссылается на ChildClassCorrected, когда метод вызывается через ChildClassCorrected.
Таким образом, позднее статическое связывание через использование static:: позволяет методам в родительском классе корректно ссылаться на методы или свойства вызвавшего класса в иерархии наследования.