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;
}
}
3 answers
Родительский метод __construct()
, определенный в классе b, будет выполняться автоматически, если вы создадите экземпляр дочернего класса a, , если только не существует метода __construct()
, определенного в классе a.
class a extends b {
}
class b {
public function __construct()
{
echo 'In B Constructor';
}
}
$x = new 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();
Я не уверен, что полностью понимаю, о чем вы спрашиваете, но вы можете вызвать метод построения родителей из конструктора ребенка
parent::__construct();
Это единственный вариант, о котором я знаю.
Вызов parent::__construct()
в a::__construct()
:
class a extends b
{
public function __construct()
{
parent::__construct();
}
public function validateStuff()
{
$this->insert_record();
}
}
Вы можете вообще опустить конструктор a, если вы не занимаетесь какими-либо конкретными делами.