PHP: Погружаясь в классы
Теория: Позднее связывание
Для понимания того, как соотносятся друг с другом внутренности классов, которые связаны наследованием, нужно разобраться с таким понятием как позднее связывание (late binding).
Вспомним базовый класс HTMLElement из прошлого урока. Внутри него активно используется $this для обращения к свойствам:
Предположим, что мы создаём объект класса HTMLAnchorElement (который наследует HTMLElement). Тогда объектом какого класса будет $this внутри методов родительского класса? Правильный ответ: HTMLAnchorElement, то есть того класса, объект которого мы прямо сейчас создаём.
Эта особенность $this называется поздним связыванием. Оно означает, что на момент определения класса, тип $this неизвестен. В качестве текущего объекта может выступать объект любого класса, наследуемого от текущего. Всё выглядит так, как будто весь код внутри базового класса, скопировали и перенесли в каждый класс-наследник. Для позднего связывания не важно, насколько глубокая иерархия наследования. $this всегда будет объектом того класса, который конструируется в коде.
Позднее связывание – важный элемент в работе наследования. Без него взаимодействие классов стало бы значительно сложнее и ограниченнее. Каждый объект должен был бы наверняка знать, к какому классу конкретно относятся свойства и методы в цепочке наследования. Понадобился бы специальный синтаксис для доступа к ним.
С другой стороны, в некоторых ситуациях позднее связывание не нужно. Например, константа ___CLASS___ всегда ссылается на тот класс, внутри которого она вызвана. В некоторых ситуациях такое поведение может быть полезно как минимум для отладки.
.png)

