Наследование

Оригинальное название: 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().

Когда лучше композиция

Глубокие цепочки — класс от класса от класса — быстро становятся хрупкими. Правка в родителе неожиданно меняет поведение всех потомков, а чтобы понять, что делает метод, приходится листать пять файлов. Если отношение звучит как «имеет» или «использует», а не «является», вместо наследования объект получает нужного помощника в свойство. Заказ не наследуется от службы доставки, а содержит её. Правило «предпочитай композицию наследованию» входит в классические советы по ООП.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение