Imaginemos a seguinte situação : você seguindo o modelo de classes criado para o projeto X, cria uma classe de usuários. Lá você tem todo o cuidado para definir os Gets e Sets, colocar seus atributos com seus devidos modificadores de acesso, cria todos os seus métodos e tudo fica perfeito, respeitando os mais elegantes padrões de programação. Logo após, você usa essa classe para, por exemplo, fazer uma busca pelo usuário de ID 7. Talvez a busca fique assim:
$usuario = new User();$usuario->setId(7);
$usuarioDesejado = $usuario->selectUser();Ok, tudo ok. Mas.... e se de repente você digita o nome do atributo de maneira errada, como por exemplo seid . O PHP vai retornar um erro, correto ? Errado. Ele não retorna erro algum. Ele não retorna nada. Na verdade, ele cria um atributo em tempo de execução chamado, neste exemplo, seid. Isso é um problema.
Claro que você, assim como eu, só alteraria o escopo de um objeto em tempo de execução por um enorme engano. Faria alguns testes, descobriria o erro e todos ficam felizes ( hipotéticamente ). Porém, existem alguns programadores que não pensam assim. Pensam que se a linguagem permite, tem que usar. Logo, aproveitam a festa pra fazer uma zona com seu objeto. Começam a criar atributos alterando o design original da sua classe.Não faça isso. Em pouco tempo o projeto se tornará em uma bola de neve, onde não se tem controle nenhum sobre o comportamento do seu código. Use a cabeça.
Por hoje é só pessoal.
2 comentários:
Saudações,
Concordo plenamente c/ o POST! Uma idéia que gosto e implemento quando estou desenvolvendo alguma coisa é o encapsulamento.
Claro! Nem tudo é perfeito, se o cara fazer setAgumaCoisa(valor) o php vai executar, mas mesmo assim, facilita muito a vida de quem pega e usa meus objetos.
Abraços e continue assim
Temos como bloquear esse comportamento no PHP5 usando os métodos mágicos de sobrecarga __set e __get que estouram automaticamente quando um atributo inexistente tenta ser acessado. É só criar seus métodos e dar uma Exception.
Entretanto vários frameworks utilizando essa "característica" do PHP para entupir seus modelos e/ou controladores com as bugigangas deles. Logo não podemos sair travando tudo... O Code Igniter é um deles...
A solução é tenta conscientizar a galera mesmo...
Obrigado pelo comentário e estamos aí!
Postar um comentário