Vantagens dos getters e setters em POO em PHP

Na lição anterior, criamos um getter e um setter para cada propriedade. Pode surgir a pergunta: por que são necessárias tantas complicações, se praticamente o mesmo efeito pode ser alcançado tornando as propriedades públicas em vez de privadas?

A questão é que os getters e setters têm uma vantagem: antes de acessar a propriedade, é possível executar algumas verificações. Por exemplo, no nosso caso, ao gravar o nome e sobrenome, podemos verificar que o novo valor não é uma string vazia:

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

Vamos testar como isso funciona. Primeiro, vamos criar um objeto da classe:

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

Agora vamos tentar gravar um valor correto:

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

E agora vamos tentar gravar um valor incorreto:

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

Na classe Employee, no setter da idade, faça uma verificação para garantir que a idade deve estar entre 0 e 120.

Задание 2

Na classe Employee, no getter do salário, faça com que ao ler o salário, um símbolo de dólar seja adicionado ao final do seu valor.