Olá amigos e amigas tudo bem? Espero que sim =) ... Hoje vou falar rapidamente do Reflection no PHP... Reflection?
O que é isso? A partir do PHP 5 foi implementado uma API chamada Reflection. Ela permite fazermos reflexão de objetos, ou seja, observar a estrutura de classes como seus métodos, atributos, interfaces... tudo em tempo de execução (runtime). Basicamente a reflexão de um objeto permite que ele se observe, como nós olhando em um espelho.
Ta, mais e como posso fazer um teste disso? Simples, vamos utilizar a ReflectionClass afim de exibir sua funcionalidade.
Veja que criamos uma classe pessoa com 2 atributos, nome e sexo e os sets e gets dessa classe... depois criamos uma instancia da ReflectionClass passando a classe Pessoa como argumento e utilizamos o metodo getMethods para buscar os mesmos... o resultado disso?
Esse foi o resultado, conseguimos "dissecar" a classe facilmente... bom não é? Eu tenho certeza que se é a primeira vez que vc lê sobre reflection vc esta com mt raiva... Mais vou amenizar isso sem te oferecer um suco de maracuja.
Onde utilizamos o reflection?
As opções são várias para utilizar o REFLECTION mais eu vou me conter apenas a falar sobre onde já é bem utilizado...
Vc já ouviu falar sobre ORM? Se sim então provavelmente conhece o DOCTRINE framework ORM para PHP não é? Veja bem, o DOCTRINE utiliza reflection nas entidades que escrevemos para poder gerar o SQL e criar/sincronizar nossas classes com o banco, assim não precisamos ficar criando scripts SQL sempre que mudarmos a estrutura do nosso banco basta sincronizar e quem faz essa brincadeira é o DOCTRINE utilizando o REFLECTION do PHP...
O BOUML um software para UML faz uma engenharia reversa do nosso código PHP para diagramas e como vc acha que ele faz isso? Mágica? Não, ele usa o reflection... São 'n' as possibilidades para o uso do reflection então se pintar uma ideia insana para uma aplicação sua e vc achar que ela é impossível pela limitação da tecnologia.... pare, pense, pesquise e implemente! :)
Espero ter ajudado!
=]
O que é isso? A partir do PHP 5 foi implementado uma API chamada Reflection. Ela permite fazermos reflexão de objetos, ou seja, observar a estrutura de classes como seus métodos, atributos, interfaces... tudo em tempo de execução (runtime). Basicamente a reflexão de um objeto permite que ele se observe, como nós olhando em um espelho.
Ta, mais e como posso fazer um teste disso? Simples, vamos utilizar a ReflectionClass afim de exibir sua funcionalidade.
- <?php
- class Pessoa{
- private $nome;
- private $sexo;
- public function getNome() {
- return $this->nome;
- }
- public function setNome($nome) {
- $this->nome = $nome;
- }
- public function getSexo() {
- return $this->sexo;
- }
- public function setSexo($sexo) {
- $this->sexo = $sexo;
- }
- }
- $reflection = new ReflectionClass('Pessoa');
- var_dump($reflection->getMethods());
Veja que criamos uma classe pessoa com 2 atributos, nome e sexo e os sets e gets dessa classe... depois criamos uma instancia da ReflectionClass passando a classe Pessoa como argumento e utilizamos o metodo getMethods para buscar os mesmos... o resultado disso?
- array(4) { [0]=> &object(ReflectionMethod)#2 (2) { ["name"]=> string(7) "getNome" ["class"]=> string(6) "Pessoa" } [1]=> &object(ReflectionMethod)#3 (2) { ["name"]=> string(7) "setNome" ["class"]=> string(6) "Pessoa" } [2]=> &object(ReflectionMethod)#4 (2) { ["name"]=> string(7) "getSexo" ["class"]=> string(6) "Pessoa" } [3]=> &object(ReflectionMethod)#5 (2) { ["name"]=> string(7) "setSexo" ["class"]=> string(6) "Pessoa" } }
Esse foi o resultado, conseguimos "dissecar" a classe facilmente... bom não é? Eu tenho certeza que se é a primeira vez que vc lê sobre reflection vc esta com mt raiva... Mais vou amenizar isso sem te oferecer um suco de maracuja.
Onde utilizamos o reflection?
As opções são várias para utilizar o REFLECTION mais eu vou me conter apenas a falar sobre onde já é bem utilizado...
Vc já ouviu falar sobre ORM? Se sim então provavelmente conhece o DOCTRINE framework ORM para PHP não é? Veja bem, o DOCTRINE utiliza reflection nas entidades que escrevemos para poder gerar o SQL e criar/sincronizar nossas classes com o banco, assim não precisamos ficar criando scripts SQL sempre que mudarmos a estrutura do nosso banco basta sincronizar e quem faz essa brincadeira é o DOCTRINE utilizando o REFLECTION do PHP...
O BOUML um software para UML faz uma engenharia reversa do nosso código PHP para diagramas e como vc acha que ele faz isso? Mágica? Não, ele usa o reflection... São 'n' as possibilidades para o uso do reflection então se pintar uma ideia insana para uma aplicação sua e vc achar que ela é impossível pela limitação da tecnologia.... pare, pense, pesquise e implemente! :)
Espero ter ajudado!
=]
Cara eu nem imaginava que reflection era tão usado por tras dos panos, legal o artigo esta de parabéns mais uma vez!
ResponderExcluir