Prepisovanie metód rodiča v OOP v PHP
Trieda-potomok môže prepísať metódu rodiča vytvorením metódy s rovnakým menom. Pozrime sa na príklad. Nech máme nasledujúcu rodičovskú triedu:
<?php
class User {
private $name;
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
V triede-potomkovi vytvorme metódu s rovnakým menom:
<?php
class Student extends User {
public function setName($name) {
}
}
?>
Spravidla sa prepisovanie metód rodiča používa na to, aby sa zmenilo alebo doplnilo správanie tejto metódy. V našom prípade pridajme kontrolu dĺžky mena:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Presvedčme sa, že volá sa práve prepísaná metóda. Najprv vytvorme objekt triedy potomka:
<?php
$student = new Student;
?>
Teraz zavolajme našu metódu, odovzdajúc jej korektnú hodnotu:
<?php
$student->setName('john');
?>
A teraz zavolajme metódu, odovzdajúc jej nekorektnú hodnotu. V dôsledku uvidíme vyvolanú výnimku:
<?php
$student->setName(''); // chyba
?>
V triede User vytvorte
getter a setter veku.
V triede Employee prepíšte
setter veku a vytvorte v ňom
kontrolu, že vek je od
18 do 65 rokov.