PHP - расширенный __конструкция
Мне было интересно, если вы могли бы помочь мне..
У меня есть два класса, один расширяет другой. Класс B будет расширяться различными различными объектами и использоваться для общих взаимодействий с базой данных. Теперь я хотел бы, чтобы класс B обрабатывал свои соединения и отключался без направления от класса A или какого-либо внешнего ввода.,
Насколько я понимаю, проблема в том, что расширенный класс не будет автоматически запускать свою функцию __construct. Есть ли способ обойти это?
Заранее спасибо..
class a extends b
{
public function __construct()
{
}
public function validateStuff()
{
$this->insert_record();
}
}
class b
{
public function __construct()
{
$this->connect();
}
protected function connect()
{
return true;
}
public function insert_record()
{
return true;
}
}
Ответы
Ответ 1
Родительский метод __construct()
, определенный в классе b, будет запускаться автоматически, если вы создаете экземпляр дочернего класса a, , если не существует метода __construct()
, определенного в классе a.
class a extends b {
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
Если метод a __construct()
определен в классе a, то это переопределяет использование метода __construct()
в классе b.... он будет запускать вместо класс b __construct()
метод
class a extends b {
public function __construct()
{
echo 'In A Constructor';
}
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
Итак, если ваш дочерний класс имеет метод __construct()
, то вам нужно явно вызвать конструктор для родителя, если вы хотите его выполнить.
class a extends b {
public function __construct()
{
parent::__construct();
echo 'In A Constructor';
}
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new a();
Ответ 2
Я не уверен, что полностью понимаю, что вы просите, но вы можете вызвать метод parent для родительского конструктора
parent::__construct();
Это единственный вариант, о котором я знаю.
Ответ 3
Вызвать parent::__construct()
в a::__construct()
:
class a extends b
{
public function __construct()
{
parent::__construct();
}
public function validateStuff()
{
$this->insert_record();
}
}
Вы можете вообще опустить конструктор, если вы не используете какой-либо конкретный материал.