Volání přepsané metody v OOP v PHP
Při přepisování ztrácí potomek
přístup k přepsané metodě
rodiče. Nicméně, přístup k ní
lze stále získat. To se provádí
pomocí klíčového slova parent,
které odkazuje na rodičovskou
třídu.
Podívejme se na příklad, kdy můžeme potřebovat přístup k rodičovské metodě. Předpokládejme, že máme následující třídu-rodiče:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
Předpokládejme, že jsme v třídě-potomkovi přepsali metodu rodiče:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Lze si všimnout, že v přepsané metodě při splnění podmínky se fakticky provádí kód rodičovské metody. Vzniká tak zbytečné duplikování kódu.
Lze se toho zbavit, pokud zavoláme metodu rodiče. Udělejme to:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
parent::setName($name); // metoda rodiče
} else {
echo 'student name error';
}
}
}
?>
Je dán následující 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';
}
}
}
?>
Ve třídě Employee opravte
zjednodušte setter věku, použijte
originální metodu rodiče.