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
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
$user = new User();
?>
Ora proviamo a impostare un valore corretto:
<?php
$user->setName('john');
?>
E ora proviamo a impostare un valore non corretto:
<?php
$user->setName(''); // errore
?>
Nella classe Employee, nel setter
dell'età, aggiungete un controllo per verificare
che l'età deve essere compresa
tra 0 e 120.
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.