Предности на сеттери и геттери во ООП во PHP

Во претходната лекција направивме за секое својство гетер и сетер. Може да се постави прашањето, зошто се потребни такви сложености, бидејќи фактички истиот ефект може да се постигне ако се направат својствата јавни, наместо приватни.

Работата е во тоа што геттерите и сеттерите имаат предност: пред пристап до својството може да се извршат некои проверки. На пример, во нашиот случај ние при запишување на името и презимето можеме да провериме, да новата вредност не е празен стринг:

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

Ајде да провериме како ова функционира. За почеток да креираме објект од класата:

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

Сега да се обидеме да запишеме коректна вредност:

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

А сега да се обидеме да запишеме некоректна:

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

Во класата Employee во сетерот за возраста направете проверка на тоа, дека возраста треба да биде од 0 до 120.

Задание 2

Во класата Employee во гетерот за платата направете така што при читање на платата на нејзината вредност да се додаде знакот за долар.