Hora ou outra a gente se depara com algumas funcionalidades que uma linguagem pode nos proporcionar. Às vezes até hesitamos em mudar nossos conceitos, mas é sempre bom tentar enxergar se determinada opção na linguagem vale a pena de ser usada na implementação. O problema é que eu tinha uma classe a fazer, com 50 atributos e estava com uma preguiça danada de escrever todo o código (sei que existem ferramentas que resolvem o caso – http://www.card2u.com.my/ClassBuilder/ ou http://www.phpclasses.org/browse/package/4794.html que geram o código e ainda oferece uma modelagem MVC com suporte à conexão nativa) mas precisava de algo mais “crú”. Então, veja o que os magic methods __get() e __set() fazem por você nessas horas:
Aqui uma classe teste
<? class Class1 { //Lista de atributos private $var1; private $var2; private $var3; /* * Método mágico que retorna os valores das variáveis privadas. * */ public function __get($atributo) { if (isset($this->{$atributo})) { if ($this->{$atributo}) return $this->{$atributo}; } else { return false; } } /* * Método mágico para atribuir valores nas variáveis privadas. * */ public function __set($name, $value) { $this->$name = $value; } } ?> |
Testando a classe Class1
<? //Declaração $classe1 = new Class1(); //Atribui 'Valor 1' a $var1 $classe1->var1 = "Valor 1"; //Atribui 'Valor 2' a $var2 $classe1->var2 = "Valor 2"; print $classe1->var1; print $classe1->var2; ?> |
Pronto, não precisei me preocupar em escrever getters e setters para os atributos da classe.