Výhody setterů a getterů v OOP v PHP
V předchozí lekci jsme vytvořili pro každou vlastnost getter a setter. Může vyvstat otázka, k čemu jsou potřebné takové komplikace, když stejného efektu lze dosáhnout, pokud uděláme vlastnosti veřejné, nikoli privátní.
Jde o to, že gettery a settery mají výhodu: před přístupem k vlastnosti lze provést některé kontroly. Například v našem případě při zápisu jména a příjmení můžeme zkontrolovat, že nová hodnota není prázdný řetězec:
<?php
class User {
private $name;
private $surn;
public function setName($name) {
if (strlen($name) > 0) {
$this->name = $name;
} else {
echo 'name is incorrect';
}
}
public function setSurn($surn) {
if (strlen($surn) > 0) {
$this->surn = $surn;
} else {
echo 'surn is incorrect';
}
}
public function getName() {
return $this->name;
}
public function getSurn() {
return $this->surn;
}
}
?>
Pojďme vyzkoušet, jak to funguje. Nejprve vytvoříme objekt třídy:
<?php
$user = new User();
?>
Nyní zkusíme zapsat správnou hodnotu:
<?php
$user->setName('john');
?>
A nyní zkusíme zapsat nesprávnou:
<?php
$user->setName(''); // chyba
?>
Ve třídě Employee v setteru
věku proveďte kontrolu, že
věk musí být
od 0 do 120.
Ve třídě Employee v getteru
platu udělejte to, aby
při čtení platu na konec jeho
hodnoty byl přidán znak dolaru.