Как конструктор дочернего класса взаимодействует с конструктором родительского класса в php?

В настоящее время я разрабатываю два класса для взаимодействия с базой данных MySQL – один расширяет другую. Вот они:

class DB_MySQL { protected $dbuser; protected $dbpass; protected $dbhost; protected $dbname; protected $dbh; // Database connection handle public function __construct($dbuser, $dbpass, $dbhost, $dbname) { $this->dbuser = $dbuser; $this->dbpass = $$dbpass; $this->dbhost = $dbhost; $this->dbname = $dbname; } //Used to create connections - almost always called by execute() protected function connect() { try { $this->dbh = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); } catch(PDOException $e) { print "Error!: ".$e->getMessage()."<br/>"; die(); } } 

И класс ребенка:

 class CheckOut extends DB_MySQL{ function __construct() { parent::__construct(); } } 

Я только начал писать их, так что пока нет «мяса». Если кто-либо видит какие-либо серьезные проблемы или какие-либо предложения, не стесняйтесь указать на это.

Мой вопрос, однако, в том, как дочерний конструктор будет взаимодействовать с родителями. Мой план состоит в том, чтобы просто создать объект CheckOut без инициации родительского элемента. Как видно, мой родительский конструктор принимает четыре значения. Итак, нужно ли переопределять эти значения в дочернем конструкторе? Чтобы быть ясным, я имею в виду:

 class CheckOut extends DB_MySQL{ function __construct($dbuser, $dbpass, $dbhost, $dbname) { parent::__construct($dbuser, $dbpass, $dbhost, $dbname); } } 

и, конечно, определить эти переменные. Или я могу добавить эти значения при создании объекта, и он будет неявно передан?

Любая помощь приветствуется.

Если конструктор дочернего класса не выполняет никаких других действий, вы можете опустить конструктор.

Только ниже хорошо:

 class CheckOut extends DB_MySQL{ } 

Но если конструктору дочернего класса нужно выполнить другую работу, да, вам нужно сделать:

 class CheckOut extends DB_MySQL{ public function __construct($dbuser, $dbpass, $dbhost, $dbname) { parent::__construct($dbuser, $dbpass, $dbhost, $dbname); do_some_other_work(); } } 

Когда вы используете, вам нужно позвонить:

 $checkout = new CheckOut($dbuser, $dbpass, $dbhost, $dbname); 

Код, который вы представили в своем вопросе, является правильным способом сделать это в этом случае (предполагая, что вы хотите сделать что-то еще в конструкторе):

 class CheckOut extends DB_MySQL{ function __construct($dbuser, $dbpass, $dbhost, $dbname) { parent::__construct($dbuser, $dbpass, $dbhost, $dbname); } } 

В противном случае (если вы не хотите ничего делать в конструкторе), вам не нужно переопределять конструктор.

 class CheckOut extends DB_MySQL{ // no constructor, Parent's constructor is called by default }