Конструктор при наследяване в ООП в PHP
При наследяване е възможно да се предефинира конструкторът на родителя. Нека разгледаме един пример. Да предположим, че имаме следния родителски клас:
<?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;
}
}
?>
Да предположим, че от родителския клас наследява следният клас:
<?php
class Student extends User {
}
?>
Да предположим, че в класа-наследник искаме да разширим конструктора, като добавим допълнителни параметри към него:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
}
}
?>
В този случай е задължително
първият ред да извика конструктора
на родителя чрез parent::__construct():
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
Командата parent::__construct() по същество е
конструкторът на родителя. Следователно
нека му подадем необходимите параметри:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
}
}
?>
Сега в наследника годината на обучение ще я запишем в собственото свойство на наследника:
<?php
class Student extends User {
private $year;
public function __construct($name, $surn, $year) {
parent::__construct($name, $surn);
$this->year = $year;
}
}
?>
Нека направим гетър за годината на обучение:
<?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;
}
}
?>
Да предположим, че класът Employee наследява
от класа User от този
урок.
Предефинирайте в класа Employee
конструктора на родителя, като добавите към него
параметър за възраст и заплата.
Направете гетъри за възрастта и заплатата.