PHP

Em por

Hoje iremos abordar os métodos mágicos __get() e __set() do PHP 5.  O PHP nos possibilita utilizar o conceito de encapsulamento da orientação a objetos de forma mais econômica, com a utilização destes métodos.

Em uma classe implementada nos padrões convencionais, para cada atributo privado declarado, precisamos criar 2 métodos (o set e o get) para atribuir e recuperar informações nesse atributo fora da classe.

Com os métodos mágicos __get e __set do PHP fica tudo mais fácil, porque basta que eu implemente-os em um arquivo e eles poderão ser utilizados para todos os atributos que a classe possuir e, melhor ainda, por todas as classes do sistema, bastando para isso usar um include desse arquivo.

Veja um exemplo:

 <?php class Pessoa { private $nome; private $sobrenome; public function __set($atrib, $value){ $this->$atrib = $value; } public function __get($atrib){ return $this->$atrib; } } ?> 

No método __set são definidos 2 parâmetros. No primeiro informamos o atributo que deverá receber o valor e no segundo informamos o valor em si. Já no método __get informamos apenas o atributo no qual desejamos capturar o valor armazenado.

Agora vamos a um exemplo de utilização dessa classe:

 <?php $Pessoa = new Pessoa(); $Pessoa->nome = 'Fulano'; $Pessoa->sobrenome = ' de Tal'; echo 'Nome: ' . $Pessoa->nome . '<br />'; echo 'Sobrenome: ' . $Pessoa->sobrenome; ?> 

Como os atributos são do tipo private, quando invocamos no objeto, na verdade o que está sendo executado são os métodos __get e __set. Essa técnica é chamada de overloading.

Muito prático e fácil de entender e também de se utilizar.

Até a próxima.

Veja Também:

Artigos Relacionados a categoria: PHP

Olá, deixe seu comentário para Métodos mágicos get e set do PHP 5

Já temos 2 comentário(s). DEIXE O SEU :)
Andrews

Andrews

Não seria uma boa prática eu verificar se o atributo existe antes de "setá-lo" na função set?
Exemplo:
public function __set($atrib, $value){
if(property_exists($this, $atrib){
$this->$atrib = $value;
}
else{ echo 'Atributo inexistente';}
}

Sei que echo não é uma boa prática, mas talvez retornar isso a uma variável..sei lá..
★☆☆☆☆ DIA 16.05.15 14h05 RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Olá Andrews, seria sim e isso vai depender muito da sua regra de negócio. Poderia até colocar uma mensagem mais específica para que fique mais fácil encontrar um problema de validação ou coisa do tipo, caso aconteça.

Até +
★☆☆☆☆ DIA 20.05.15 20h05 RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora