OOP: Вызов родительского конструктора
Glossary overview

OOP: Вызов родительского конструктора

Если наследник переопределяет конструктор — он должен вызвать parent::__construct(), иначе логика родителя потеряется.

// PluginOptions.php
protected function __construct()
{
    // своя логика...
    $this->setSections($all_options);

    parent::__construct(); // ← вызываем конструктор Options
}

Когда наследник определяет свой __construct() — он полностью заменяет конструктор родителя. PHP не вызывает оба — только тот, что ближе.

class PluginOptions extends Options
{
    protected function __construct()
    {
        // ← PHP выполняет ТОЛЬКО этот конструктор
        // ← конструктор Options::__construct() НЕ вызывается автоматически
        // ← если в Options есть инициализация — она потеряна
    }
}

parent::__construct() — явный вызов конструктора родителя. Без него — код родительского конструктора не выполнится.

Порядок вызова имеет значение.

// PluginOptions.php
protected function __construct()
{
    // 1. Сначала СВОЯ логика:
    GlobalOptions::init();
    $this->setSections($all_options);  // ← заполняет секции

    // 2. Потом РОДИТЕЛЬ:
    parent::__construct();             // ← может использовать уже заполненные секции
}

Здесь parent::__construct() вызывается в конце — потому что родитель может зависеть от данных, которые наследник подготовил (секции должны быть уже заполнены).

Бывает и наоборот:

// Если родитель должен инициализировать базу первым:
protected function __construct()
{
    parent::__construct();  // ← сначала родитель
    // потом своя логика
}