Ha algum tempo trabelhei numa empresa onde conheci uma pessoa, que nesta empresa ela, trabalhava com entre outras coisa o Java e certa vez ela fez uma observação que um objeto em PHP poderia iniciar com um atributo e no decorrer de sua vida ele poderia ir adquirindo vários outros e que no Java isso não era possível, de fato o PHP tem disso, e de fato isso não desejável e outro de fato é que ele tinha razão, mas e o PHP evolui e isso é uma consante. Para enteder melhor o que estou tentando externar, vai um exemplo:
Este comportamento, inadequado ao meu ver se dá devido ao PHP ter sua verificação relaxada ou seja ele verifica se é um objeto, mas se o atributo existe ou não para ele tanto faz. Na verdade não existir ele criará em run-time. Mas nem sempre isso é desejável. queremos uma forma de dizer ao PHP que se o atributo existir ele atribua o valor informado a este, porém, se não existir ele lance um SuperNomeGrandeParaDefinirQueAlgoNãoEstaCertoException. Nossa!
- <php
- class Foo{ }
- $f = new Foo();
- $f->nome = "João Roberto";
- echo $f->nome;
- ?>
- saída: João Roberto.
- <php
- class Foo{
- public $nome;
- public function __set( $nomeAtributo, $valorAtribtuo ){
- if( isset( $this->$nomeAtributo ) )
- $this->$nomeAtributo = $valorAtribtuo;
- else
- throw new Exception( "Error: O atributo: {$nomeAtributo} não existe." );
- }
- }
- $f = new Foo();
- $f->nomes = "João Roberto";
- ?>
void __set ( string name, mixed value )
Onde void é retorno, ou seja, não retorna nada. string name é o nome do atributo que está sendo informado e por fim mixed value é o valor que está sendo atribuido para este atributo.
. . .continuando . . .
Com isso a gente força o PHP a não aceitar qualquer coisa, afinal, ele não é nem de longe é parente do ponto( . ) das Expressões Regulares.
Em nosso próximo encontro estaremos vendo sobrecarga de métodos.
Até Lá.
