Предимства на сетъри и гетъри в ООП в 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 в гетъра за заплата направете така, че при четене на заплатата в края на стойността й да се добавя знак за долар.