Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Implementação do __set()

Olá

Implementei da seguinte forma:

public function __set($name, $value)
{
    $this->$name = $value;
}

E depois em enderecos.php:

$endereco1->__set('cidade', 'Rio');
$endereco1->cidade = 'São Paulo';
var_dump($endereco1);
echo $endereco1->cidade;

Dá para atribuir o valor a cidade dessas duas formas? Existem diferenças? Qual a mais correcta?

Ao nível da segurança não seria melhor implementar método altera (rua, numero, cidade, bairro) na classe Endereco e depois ao utilizar o método mágico __set recorrer a esses metodos altera, dessa forma podendo utilizar filtros de segurança e regras de negócio nos mesmo?

E se passarmos um atributo que é imutável para o __set(), dentro do método __set, teremos realizar um if? Do género:

public function __set($name, $value)
{
    if($name === 'cidade') {
        echo "A cidade não pode ser alterada";
        return;
    } else {
            $this->$name = $value;
    }
}

Obrigado.

1 resposta
solução!

Olá, André.

Métodos mágicos não devem ser chamados diretamente. $endereco1->__set(...) é uma má prática.

Sim, o ideal seria ter um método altera para modificar os valores que podem ser alterados.