Перавагі сетэраў і гетэраў у ААП у 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 у гетэры зарплаты зрабіце так, каб пры чытанні зарплаты ў канец яе значэння дадаваўся знак даляра.