Извикване на предефиниран метод в ООП в 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 поправете
опростете сетъра за възраст, като използвате
оригиналния метод на родителя.