Vantaggi di setter e getter in OOP in PHP

Nella lezione precedente abbiamo creato un getter e un setter per ogni proprietà. Potrebbe sorgere la domanda: a cosa servono tutte queste complicazioni, dato che praticamente lo stesso effetto si può ottenere rendendo le proprietà pubbliche invece che private.

Il punto è che i getter e i setter hanno un vantaggio: prima di accedere alla proprietà è possibile eseguire alcuni controlli. Ad esempio, nel nostro caso, quando impostiamo nome e cognome, possiamo verificare che il nuovo valore non sia una stringa vuota:

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

Verifichiamo come funziona. Per prima cosa creiamo un oggetto della classe:

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

Ora proviamo a impostare un valore corretto:

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

E ora proviamo a impostare un valore non corretto:

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

Nella classe Employee, nel setter dell'età, aggiungete un controllo per verificare che l'età deve essere compresa tra 0 e 120.

Задание 2

Nella classe Employee, nel getter dello stipendio, fate in modo che alla lettura dello stipendio, alla fine del suo valore venga aggiunto il simbolo del dollaro.