Наследование
Оригинальное название: inheritance
Коротко
Механизм объектно-ориентированного программирования, при котором новый класс получает свойства и методы существующего и может добавлять к ним свои или переопределять поведение.
Что такое «Наследование»
Наследование описывает отношение «является разновидностью»: курьерская доставка — разновидность доставки, администратор — разновидность пользователя. Общий код пишут один раз в родительском классе, а потомки добавляют то, что отличает их от остальных. Потомок можно подставить везде, где ожидается родитель, — на этом держится полиморфизм.
Как это выглядит в PHP
Потомок объявляется ключевым словом extends. Переопределённый метод может вызвать версию родителя через parent::. Модификатор protected открывает свойство потомкам, но не внешнему коду. Абстрактный класс нельзя создать напрямую — он служит заготовкой, а final запрещает наследоваться от класса или переопределять метод. В PHP, как и в Java, у класса может быть только один родитель; общие куски кода для разных веток подключают трейтами и интерфейсами.
Наследование в Битриксе и WordPress
Обе CMS используют его как точку расширения. В 1С-Битриксе логику собственного компонента пишут в классе, унаследованном от CBitrixComponent:
class CatalogTopComponent extends CBitrixComponent
{
public function executeComponent()
{
if ($this->startResultCache()) {
$this->arResult['ITEMS'] = $this->loadItems();
$this->includeComponentTemplate();
}
}
private function loadItems(): array { return []; }
}
Кеширование, параметры и подключение шаблона достались от родителя, свой здесь только метод выборки. Так пишут собственные компоненты, когда стандартных не хватает, — обычная часть доработки сайта на 1С-Битриксе. В WordPress так создают классические виджеты: класс наследует WP_Widget и переопределяет методы widget(), form() и update().
Когда лучше композиция
Глубокие цепочки — класс от класса от класса — быстро становятся хрупкими. Правка в родителе неожиданно меняет поведение всех потомков, а чтобы понять, что делает метод, приходится листать пять файлов. Если отношение звучит как «имеет» или «использует», а не «является», вместо наследования объект получает нужного помощника в свойство. Заказ не наследуется от службы доставки, а содержит её. Правило «предпочитай композицию наследованию» входит в классические советы по ООП.

