Как обратиться к конструктору (первого) родительского класса? Здравствуйте. В процессе дискуссии (ну, вы знаете, что в подобные моменты в голову приходят всевозможные мысли, что есть очень хорошо) возник вопрос - можно ли вызвать конструктор "первого" родительского класса при такой иерархии наследования:class Prnt { public function __construct() { echo 'In Prnt'; } } class A extends Prnt { public function __construct() { echo 'In A'; } } class B extends A { public function __construct() { echo 'In B'; } } Как в конструкторе класса В вызвать конструктор родительского класса А - вопросов не вызывает, но вот как вызвать из конструктора класса В конструктор класса Prnt (при этом, в конструкторе класса А нет обращения к конструктору класса Prnt)- здесь мы остановились на том, что нельзя подобный вызов реализовать. Вроде бы вопрос закрыт, но всё-таки хочется услышать мнение более опытных людей.
В данном случае, вызвать конструктор "первого" родительского класса (Prnt) напрямую из конструктора класса B невозможно. Однако, можно продумать другой подход: сделать конструктор в классе A, который вызовет конструктор класса Prnt, а затем уже вызвать этот конструктор из класса B. Например, такой код будет работать:
class Prnt { public function __construct() { echo 'In Prnt'; } } class A extends Prnt { public function __construct() { parent::__construct(); // Вызываем конструктор родительского класса Prnt echo 'In A'; } } class B extends A { public function __construct() { parent::__construct(); // Вызываем конструктор родительского класса A echo 'In B'; } } // Создаем объект класса B $b = new B();
Таким образом, конструкторы классов A и B вызывают нужные конструкторы родительских классов в правильном порядке.
В данном случае, вызвать конструктор "первого" родительского класса (Prnt) напрямую из конструктора класса B невозможно.
class Prnt {Однако, можно продумать другой подход: сделать конструктор в классе A, который вызовет конструктор класса Prnt, а затем уже вызвать этот конструктор из класса B. Например, такой код будет работать:
public function __construct() {
echo 'In Prnt';
}
}
class A extends Prnt {
public function __construct() {
parent::__construct(); // Вызываем конструктор родительского класса Prnt
echo 'In A';
}
}
class B extends A {
public function __construct() {
parent::__construct(); // Вызываем конструктор родительского класса A
echo 'In B';
}
}
// Создаем объект класса B
$b = new B();
Таким образом, конструкторы классов A и B вызывают нужные конструкторы родительских классов в правильном порядке.