Нужно ли обращаться к конструктору наследуемого класса? Всем привет. Вот пример, который вызвал сомнения в моих действиях:abstract class A extends PDO{ public function __construct(){ // устанавливаем соединение с бд } ... } class B extends A{ function __construct(){ parent::__construct(); } // используем методы из A } Суть в том, что если в классе B не использовать такой конструктор, то вылезает ошибка:Call to a member function prepare() on null in По идее абстрактных классов - их нельзя инициализировать. Это то, что мне нужно. Но я бы хотел, чтобы при наследовании такого абстрактного класса запускалась функция типа конструктора, без вызова конструктора в дочернем классе, как у меня в примере. Возможно ли такое?
В данном случае, вам действительно нужно вызывать конструктор родительского класса (класса A) в конструкторе дочернего класса (класса B). Это связано с тем, что в конструкторе класса A устанавливается соединение с базой данных (или выполняются другие необходимые действия), которые необходимы для корректной работы класса.
Если вы хотите, чтобы при наследовании вызывалась функция типа конструктора без явного вызова конструктора в дочернем классе, вы можете использовать методы инициализации или фабричные методы, которые будут вызываться автоматически при создании объекта класса. Например:
abstract class A extends PDO{ public function init(){ // устанавливаем соединение с бд } ... } class B extends A{ public function __construct(){ $this->init(); } // используем методы из A
}
Таким образом, при создании объекта класса B будет вызываться метод init() родительского класса A, который будет выполнять необходимые действия.
В данном случае, вам действительно нужно вызывать конструктор родительского класса (класса A) в конструкторе дочернего класса (класса B). Это связано с тем, что в конструкторе класса A устанавливается соединение с базой данных (или выполняются другие необходимые действия), которые необходимы для корректной работы класса.
Если вы хотите, чтобы при наследовании вызывалась функция типа конструктора без явного вызова конструктора в дочернем классе, вы можете использовать методы инициализации или фабричные методы, которые будут вызываться автоматически при создании объекта класса. Например:
abstract class A extends PDO{
public function init(){
// устанавливаем соединение с бд
}
...
}
class B extends A{
public function __construct(){
$this->init();
}
// используем методы из A
}
Таким образом, при создании объекта класса B будет вызываться метод init() родительского класса A, который будет выполнять необходимые действия.