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