Нужно ли обращаться к конструктору наследуемого класса? Всем привет.
Вот пример, который вызвал сомнения в моих действиях: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
По идее абстрактных классов - их нельзя инициализировать. Это то, что мне нужно. Но я бы хотел, чтобы при наследовании такого абстрактного класса запускалась функция типа конструктора, без вызова конструктора в дочернем классе, как у меня в примере. Возможно ли такое?

21 Авг 2019 в 07:05
223 +2
0
Ответы
1

В данном случае, вам действительно нужно вызывать конструктор родительского класса (класса A) в конструкторе дочернего класса (класса B). Это связано с тем, что в конструкторе класса A устанавливается соединение с базой данных (или выполняются другие необходимые действия), которые необходимы для корректной работы класса.

Если вы хотите, чтобы при наследовании вызывалась функция типа конструктора без явного вызова конструктора в дочернем классе, вы можете использовать методы инициализации или фабричные методы, которые будут вызываться автоматически при создании объекта класса. Например:

abstract class A extends PDO{
public function init(){
// устанавливаем соединение с бд
}
...
}
class B extends A{
public function __construct(){
$this->init();
}
// используем методы из A

}

Таким образом, при создании объекта класса B будет вызываться метод init() родительского класса A, который будет выполнять необходимые действия.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир