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