Volanie prepísanej metódy v OOP v PHP
Pri prepisovaní stráca potomok
prístup k prepísanej metóde
rodiča. Avšak, získať k nej
prístup sa napriek tomu dá. Robí sa to
pomocou kľúčového slova parent,
ktoré ukazuje na rodičovskú
triedu.
Pozrime sa na príklad, kedy nám môže byť potrebný prístup k rodičovskej metóde. Predpokladajme, že máme nasledujúcu triedu-rodiča:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Predpokladajme, že sme v triede-potomkovi prepísali metódu rodiča:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Možno si všimnúť, že v prepísanej metóde pri splnení podmienky sa v podstate vykonáva kód rodičovskej metódy. Vzniká tak zbytočné duplikovanie kódu.
Je sa ho možné zbaviť, ak zavoláme metódu rodiča. Urobme to:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // metóda rodiča
} else {
echo 'student name error';
}
}
}
?>
Daný je nasledujúci kód:
<?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';
}
}
}
?>
V triede Employee opravte
zjednodušte setter veku, použite
originálnu metódu rodiča.