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

Método mágicos __set e __get

Estou lendo o livro do Pablo Dall'Oglio sobre PHP Orientado a Objetos onde no 3 capítulo, página 175 ele mostra um exemplo de uso dos métodos _get e _set que me deixou um pouco com pé atrás. Basicamente temos um atributo $data que é um array que vai ser preenchido quando um atributo for setado, executando o método mágico _set. A minha dúvida é se na vida real realmente esses métodos são usados como na imagem onde o autor cria um método chamado setVencimento onde ele faz a validação de uma data e no método mágico _set ele verifica em um if o nome da propriedade e executa o método setVencimento caso o atributo chame-se dt_vencimento. Fico imaginando uma classe onde teremos vários atributos, cada um com um método de validação aí no método __set() teríamos vários ifs verificando o nome da cada atributo e executando seu método de validação, iso não me parece certo. O que acham?

Imagem do código: http://imgur.com/a/vuvdh

1 resposta
solução!

Oi Luan, tudo bom?

Eu, particularmente, nunca vi isso ser implementado em um projeto grande. Tanto porque, normalmente, os frameworks utilizam o padrão de getters e setters por atributo para realizar algumas "magias". Como, por exemplo, quando a gente usa um ORM (doctrine) e resgata do banco de dados uma entidade. Para que o framework consiga criar uma instancia dessa entidade e popular os dados ele olha (por reflection) os atributos dessa entidade e chama os setters para cada um deles.

Além disso, essa ideia de criar um setter generico para qualquer atributo é bem famosa. Mas, imagina se em algum momento sua regra de negocio pede alguma validação ao definir um atributo. Com um setter generico a gente precisaria realizar varios ifs para verificar se o atributo que a gente quer validar está sendo passado para poder realizar a validação.

Esse tipo de abordagem sempre acaba gerando bastante if no código. Se a gente ta fazendo muito if algo está errado.

A literatura de orientação a objetos não costuma ser muito forte na linguagem de PHP, tanto porque estamos caminhando para o paradigma há pouco tempo. Nas ultimas versões e tal.

Eu recomendaria você dar uma olhada nos livros de orientação a objetos com java.Aqui na casa do código existem boas opções por um preço legal. O jeito de escrever muda um pouco mas o paradigma é o mesmo, basta adaptar para a linguagem.

Abraço e bons estudos =)