Вызов переопределенного метода в ООП в PHP
При переопределении потомок теряет
доступ к переопределенному методу
родителя. Однако, получить к нему
доступ все равно можно. Это делается
с помощью ключевого слова parent
,
которое указывает на родительский
класс.
Давайте посмотрим на примере, когда нам может понадобится доступ к родительскому методу. Пусть у нас есть следующий класс-родитель:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Пусть мы в классе-потомке переопределили метод родителя:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Можно заметить, что в переопределенном методе при выполнения условия фактически выполняется код родительского метода. Получается не нужное дублирование кода.
Можно от него избавиться, если вызвать метод родителя. Давайте сделаем это:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // метод родителя
} else {
echo 'student name error';
}
}
}
?>
Дан следующий код:
<?php
class User {
private $age;
public function setAge($age) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
}
}
class Employee extends User {
public function setAge($age) {
if ($age <= 120) {
if ($age >= 0) {
$this->age = $age;
} else {
echo 'need age more 0';
}
} else {
echo 'need age less 120';
}
}
}
?>
В классе Employee
исправьте
упростите сеттер возраста, использовав
оригинальный метод родителя.