Przesłanianie metod rodzica w OOP w PHP
Klasa potomna może przesłonić metodę rodzica, tworząc metodę o tej samej nazwie. Spójrzmy na przykład. 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;
}
}
?>
Stwórzmy w klasie potomnej metodę o tej samej nazwie:
<?php
class Student extends User {
public function setName($name) {
}
}
?>
Zazwyczaj przesłanianie metod rodzica służy do zmiany lub rozszerzenia zachowania tej metody. W naszym przypadku dodajmy sprawdzanie długości imienia:
<?php
class Student extends User {
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'student name error';
}
}
}
?>
Upewnijmy się, że wywoływana jest właśnie przesłonięta metoda. Na początek stwórzmy obiekt klasy potomka:
<?php
$student = new Student;
?>
Teraz wywołajmy naszą metodę, przekazując do niej poprawne wartości:
<?php
$student->setName('john');
?>
A teraz wywołajmy metodę, przekazując do niej niepoprawne wartości. W rezultacie zobaczymy wyrzucony wyjątek:
<?php
$student->setName(''); // błąd
?>
W klasie User zrób
getter i setter wieku.
W klasie Employee przesłoń
setter wieku i zrób w nim
sprawdzenie, czy wiek jest od
18 do 65 lat.