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
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
$user = new User();
?>
Agora vamos tentar gravar um valor correto:
<?php
$user->setName('john');
?>
E agora vamos tentar gravar um valor incorreto:
<?php
$user->setName(''); // erro
?>
Na classe Employee, no setter da
idade, faça uma verificação para garantir
que a idade deve estar
entre 0 e 120.
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.