Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Emerson Rodrigo

[Resolvido] Pegar valores dos atributos de uma Classa (Reflection

Recommended Posts

Bom dia galera!

 

Queria saber como pegar os valores dos atributos de uma classe usando Reflection.

 

Por exemplo:

 

Tenho a seguinte classe:

 

class Cliente{
   private $nome;
   private $endereco;
   private $cpf;

   //Getters and Setters
}

 

Instancio um objeto dessa classe e definos alguns valores para os atributos:

 

 $cli = new Cliente();
$cli->setNome("emerson");
$cli->setEndereco("teste");
$cli->setCpf("teste");

 

Beleza até ai tudo bem, agora quero usar Reflection para pegar os valores dos atributos desse objeto,

Fiz o seguinte:

 

$ref = new ReflectionObject($cli);

$atr = $ref->getDefaultProperties();

printr($a);

 

Ele me retorna um array com os atributos, porém com os valores vazios!

 

Alguem saberia como fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja as anotações no manual, logo abaixo da ainda não tão explicativa página do Manual:

 

This will return all properties in a class and any parent classes. The array will have keys set to the property names and empty values.

Traduzindo livremente...

 

"Isto irá retornar todas as propriedades na classe e quaisquer classes-pai. O array terá as chaves definidas com os nomes das propriedades e valores em vazios."

 

Não tenho a menor idéia do motivo que você tem, mas deve ter algum.

 

Uma idéia seria você fazer um foreach sobre o retorno de ReflectionClass::getProperties() e montar um array a ser retornado.

 

A variável depois do as terá o nome da propriedade, assim você poderá estruturar os índices, já os valores você pode fazer, dentro do loop ainda:

 

$object -> {$variavel_apos_o_as}

Mas você terá problemas se as variáveis não fore públicas, por razões de encapsulamento.

 

MAS, se os seus getters seguirem um padrão do tipo getNomePropiedade, você pode concatenar esse prefixo ao termo entre chaves descrito acima.

 

Outra opção, embora eu não confirme pois NUNCA usei, seria através de ReflectionClass::export(). Pode experimentar também, mas não sei que ela retorna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.