Вызываются ли родительские конструкторы, если дочерний класс НЕ определяет конструктор?

В документации конструкторов и деструкторов PHP он указывает

Примечание. Родительские конструкторы не называются неявно, если дочерний класс определяет конструктор. Чтобы запустить родительский конструктор, вызов parent:: __ construct() внутри дочернего конструктора.

Но что, если дочерний класс не вызывает конструктор, будет ли вызываться родительский конструктор? Или мы должны создать конструктор, который все равно вызывает родительский конструктор?

IE:

class BaseClass {
   function __construct() {
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();
   }
}

Ответы

Ответ 1

Возможно, это было похоже на очевидность, но некоторые огляделись, и прямой ответ на этот вопрос на удивление был не так-то просто найти, так вот:

Если дочерний класс НЕ определяет конструктор, тогда будет вызываться родительский конструктор.

В приведенном ниже примере $obj все равно вызовет конструктор из BaseClass, потому что SubClass никогда не вызывал конструктор.

class BaseClass {
    function __construct() {
       print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    //I do not have a constructor :(
}

$obj = new SubClass();

Ответ 2

Учесть конструктор - это метод, который можно переопределить как любой другой метод. Если родительский класс имеет конструктор, все его дочерние классы наследуют этот конструктор. Если дочерний элемент переопределяет конструктор, это будет использоваться при создании новых объектов, а родительский конструктор не будет называться неявно. Если дочерний элемент не переопределяет конструктор, будет использоваться родительский конструктор. Эта концепция применяется к множественному наследованию.