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<?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<?php
  $user = new User();
?>

Nyní zkusíme zapsat správnou hodnotu:

php<?php
  $user->setName('john');
?>

A nyní zkusíme zapsat nesprávnou:

php<?php
  $user->setName(''); // chyba
?>
Задание 1

Ve třídě Employee v setteru věku proveďte kontrolu, že věk musí být od 0 do 120.

Задание 2

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.