Ventajas de los getters y setters en POO en PHP

En la lección anterior, creamos un getter y un setter para cada propiedad. Puede surgir la pregunta: ¿por qué son necesarias tales complejidades, si de hecho se puede lograr el mismo efecto haciendo las propiedades públicas, no privadas?

El caso es que los getters y setters tienen una ventaja: antes de acceder a la propiedad se pueden realizar algunas comprobaciones. Por ejemplo, en nuestro caso, al asignar el nombre y el apellido podemos verificar que el nuevo valor no sea una cadena vacía:

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

Comprobemos cómo funciona esto. Primero, creemos un objeto de la clase:

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

Ahora intentemos asignar un valor correcto:

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

Y ahora intentemos asignar uno incorrecto:

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

En la clase Employee, en el setter de la edad, implemente una verificación para asegurar que la edad debe estar entre 0 y 120.

Задание 2

En la clase Employee, en el getter del salario, hágalo de modo que al leer el salario, al final de su valor se agregue el signo de dólar.