Výhody setterov a getterov v OOP v PHP

V predchádzajúcej lekcii sme vytvorili pre každú vlastnosť getter a setter. Môže vzniknúť otázka, na čo sú takéto komplikácie potrebné, veď fakticky rovnakého efektu sa dá dosiahnuť, ak urobíme vlastnosti verejnými, nie súkromnými.

Vec sa má tak, že gettery a settery majú výhodu: pred prístupom k vlastnosti je možné vykonať niektoré kontroly. Napríklad v našom prípade pri zápise mena a priezviska môžeme skontrolovať, že nová hodnota nie je prázdny reťazec:

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;
    }
  }
?>

Poďme otestovať, ako to funguje. Najprv vytvoríme objekt triedy:

php<?php
  $user = new User();
?>

Teraz skúsme zapísať korektnú hodnotu:

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

A teraz skúsme zapísať nekorektnú:

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

V triede Employee v setteri veku vykonajte kontrolu, že vek musí byť od 0 do 120.

Задание 2

V triede Employee v getteri platu urobte tak, aby pri čítaní platu na koniec jeho hodnoty bol pridaný znak dolára.