Конструктор при наследовании в ООП в 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
конструктор родителя, добавив в него
параметр с возрастом и зарплатой.
Сделайте геттеры для возраста и зарплаты.