Constructeur lors de l'héritage en POO en PHP
Lors de l'héritage, il est possible de redéfinir le constructeur du parent. Regardons un exemple. Supposons que nous ayons la classe parente suivante :
<?php
class User {
private $name;
private $surn;
public function __construct($name, $surn) {
$this->name = $name;
$this->surn = $surn;
}
public function getName() {
return $this->name;
}
public function getSurn() {
return $this->surn;
}
}
?>
Supposons que la classe suivante hérite de la classe parente :
<?php
class Student extends User {
}
?>
Supposons que nous voulions dans la classe enfant étendre le constructeur, en y ajoutant des paramètres supplémentaires :
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
}
}
?>
Dans ce cas, nous devons impérativement
appeler en première ligne le constructeur
du parent via parent::__construct() :
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
La commande parent::__construct() est en substance
le constructeur du parent. Donc
passons-lui les paramètres requis :
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
Maintenant, dans l'enfant, l'année d'étude sera enregistrée dans sa propre propriété de l'enfant :
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
$this->year = $year;
}
}
?>
Créons un getter pour l'année d'étude :
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
$this->year = $year;
}
public function getYear() {
return $this->year;
}
}
?>
Supposons que la classe Employee hérite
de la classe User de cette
leçon.
Redéfinissez dans la classe Employee
le constructeur du parent, en y ajoutant
un paramètre pour l'âge et le salaire.
Créez des getters pour l'âge et le salaire.