Wywołanie nadpisanej metody w OOP w PHP
Przy nadpisywaniu klasa potomna traci
dostęp do nadpisanej metody
rodzica. Jednakże, uzyskanie do niego
dostępu jest nadal możliwe. Robi się to
za pomocą słowa kluczowego parent,
które wskazuje na klasę rodzica.
Spójrzmy na przykład, kiedy może nam być potrzebny dostęp do metody rodzica. Załóżmy, że mamy następującą klasę-rodzica:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Załóżmy, że w klasie-potomnej nadpisaliśmy metodę rodzica:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Można zauważyć, że w nadpisanej metodzie przy spełnieniu warunku faktycznie wykonywany jest kod metody rodzica. Powstaje niepotywne powielanie kodu.
Można się go pozbyć, jeśli wywołać metodę rodzica. Zróbmy to:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // metoda rodzica
} else {
echo 'student name error';
}
}
}
?>
Dany jest następujący kod:
<?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';
}
}
}
?>
W klasie Employee popraw
uprość setter wieku, wykorzystując
oryginalną metodę rodzica.