Terceiro post sobre métodos mágicos no PHP 5 será sobre as funções __set() e __get(). Talvez a grande facilidade que esses métodos nos trazem é a possibilidade de utilizar o conceito de encapsulamento da orientação a objetos de forma mais econômica.
Em uma classe implementada nos padrões convencionais, para cada atributo privado declarado e que seu valor necessita ser manipulado “fora da classe”, precisamos criar 2 métodos (o set e o get) para atribuir e recuperar informações nesse atributo
Com os métodos mágicos __set e __get fica mais fácil, porque basta que eu os implemente e eles poderão ser utilizados para todos os atributos que a classe possuir.
Veja um exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?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 eu defini 2 parâmetros. No primeiro eu informo o atributo que deverá receber o valor e no segundo eu informo justamente o valor. Já no método __get eu informo apenas o atributo no qual eu desejo capturar o valor armazenado.
Agora vamos a um exemplo de utilização dessa classe:
1 2 3 4 5 6 7 | <?php $Pessoa = new Pessoa(); $Pessoa->nome = 'Rafael'; $Pessoa->sobrenome = 'Pinheiro'; echo 'Nome: ' . $Pessoa->nome . '<br />'; echo 'Sobrenome: ' . $Pessoa->sobrenome; |
Como os atributos são do tipo private, quando eu os invoco no objeto, na verdade o que está sendo executado são os métodos __set e __get. Essa técnica é chamada de overloading
Muito prático, fácil de entender e também de se utilizar.
Até a próxima.
Abs.
Siga-me no twitter: @rafaelwendel
Olá parabéns pelos post !! =D
gostaria de saber se existe alguma IDE que da o autocomplete para os métodos mágicos
Olá José,
Utilizo aqui o NetBeans 7.0 e ele autocompleta os metodos magicos.
Abs
Parabéns, excelente explicação!
A forma como se explica pode tornar as coisas muito mais simples.
Gostei muito… Só queria saber como seria se essa informações tem que inserido no bando de dados e depois retornaria esses valores?
Francisco,
Seu questionamento envolve conceitos de conexão com o banco de dados, execução de querys, etc. Pode fazer isso na mão ou utilizar algum framework.
Abs!
Gostei do post. Me ajudou. Vlw
Perfeito, melhor explicação impossivel