API de Reflexão no PHP5
Usando a reflexão do PHP5 temos um maior controle das classes, interfaces, funções, extensões em tempo de execução e até mesmo dos blocos de comentários.
Vamos para os exemplos:
Usando o "Reflection::export" printará na tela todas as informações da classe "Teste", desde o seu nome, caminho físico até os nomes dos métodos, o número das linhas onde eles se encontram entre outras informações.
A classe "ReflectionClass" é a responsável para obter informações das nossas classes.
Outro exemplo:
Como paramêtro da "ReflectionClass" passamos o nome da nossa classe "Teste" de exemplo.
O método "newInstance" retorna uma instância da classe "Teste".
O "getDocComment" retorna o comentário da classe.
Mais um exemplo:
A classe "ReflectionMethod" serve para obter informações dos métodos das classes, passamos como parâmetros o nome da classe e o método.
O método "getName" retorna o nome do método.
O "getDocComment" retorna o comentário do método.
O "getNumberOfParameters" retorna o número de parâmetros que tem no método.
O "getStartLine" fala o número da linha onde começa e o "getEndLine" onde termina.
O último "isPrivate" retorna um boolean para saber se o método é privado.
O nosso último exemplo:
Só acrescentado que a classe "ReflectionFunction" serve para obter informações das funções, como parâmetro passamos o nome da função.
Bom é isso espero que tenham gostado, lembrando que existem outras classes de reflexão(como a ReflectionParameter, ReflectionProperty, ReflectionExtension).
Para maiores detalhes acessem o manual oficial: http://br2.php.net/manual/pt_BR/language.oop5.reflection.php
Sem mais, Rodrigo.
Vamos para os exemplos:
<?php class Teste { private $nome; function __construct() { echo "hello<br>"; } public function setNome($nome) { $this->nome = $nome; } public function getNome() { return $this->nome; } } try { echo "<pre>"; Reflection::export(new ReflectionClass('Teste')); echo "</pre>"; } catch(Exception $exception) { echo "Aconteceu algum erro: {$exception->getMessage()}."; } ?>
Usando o "Reflection::export" printará na tela todas as informações da classe "Teste", desde o seu nome, caminho físico até os nomes dos métodos, o número das linhas onde eles se encontram entre outras informações.
A classe "ReflectionClass" é a responsável para obter informações das nossas classes.
Outro exemplo:
<?php /** * Autor: Rodrigo Rodrigues * Descrição: Usando Reflexão no Php5. * Data: 21/05/2005 */ class Teste { private $nome; function __construct() { } public function setNome($nome) { $this->nome = $nome; } public function getNome() { return $this->nome; } } try { $reflectionClass = new ReflectionClass("Teste"); $teste = $reflectionClass->newInstance(); $teste->setNome("Php5 também é a luz."); echo $teste->getNome()."<br>"; echo $reflectionClass->getDocComment(); } catch(Exception $exception) { echo "Aconteceu algum erro: {$exception->getMessage()}."; } ?>
Como paramêtro da "ReflectionClass" passamos o nome da nossa classe "Teste" de exemplo.
O método "newInstance" retorna uma instância da classe "Teste".
O "getDocComment" retorna o comentário da classe.
Mais um exemplo:
<?php /** * Autor: Rodrigo Rodrigues * Descrição: Usando Reflexão no Php5. * Data: 21/05/2005 */ class Teste { private $nome; function __construct() { } /** * Método Set para atribuir valor ao nome. * @access public * @return void; * @param String nome; */ public function setNome($nome) { $this->nome = $nome; } public function getNome() { return $this->nome; } } try { $reflectionMethod = new ReflectionMethod("Teste", "setNome"); echo "O método se chama: {$reflectionMethod->getName()}<br>"; echo "Tem os comentários: {$reflectionMethod->getDocComment()}<br>"; echo "Tem a quantidade de parametros: {$reflectionMethod->getNumberOfParameters()}<br>"; echo "Ele começa na linha: {$reflectionMethod->getStartLine()} e termina na linha: {$reflectionMethod->getEndLine()}<br>"; echo "Ele é um método privado: ".($reflectionMethod->isPrivate() ? "Sim" : "Não").""; } catch(Exception $exception) { echo "Aconteceu algum erro: {$exception->getMessage()}."; } ?>
A classe "ReflectionMethod" serve para obter informações dos métodos das classes, passamos como parâmetros o nome da classe e o método.
O método "getName" retorna o nome do método.
O "getDocComment" retorna o comentário do método.
O "getNumberOfParameters" retorna o número de parâmetros que tem no método.
O "getStartLine" fala o número da linha onde começa e o "getEndLine" onde termina.
O último "isPrivate" retorna um boolean para saber se o método é privado.
O nosso último exemplo:
<?php /** * Função para somar 2 números * @param int a * @param int b * @return int */ function soma($a, $b) { return ($a + b); } try { $reflectionFunction = new ReflectionFunction("soma"); echo "A função se chama: {$reflectionFunction->getName()}<br>"; echo "Tem os comentários: {$reflectionFunction->getDocComment()}<br>"; echo "Tem a quantidade de parametros: {$reflectionFunction->getNumberOfParameters()}<br>"; echo "Ela começa na linha: {$reflectionFunction->getStartLine()} e termina na linha: {$reflectionFunction->getEndLine()}.<br>"; } catch(Exception $exception) { echo "Aconteceu algum erro: {$exception->getMessage()}."; } ?>
Só acrescentado que a classe "ReflectionFunction" serve para obter informações das funções, como parâmetro passamos o nome da função.
Bom é isso espero que tenham gostado, lembrando que existem outras classes de reflexão(como a ReflectionParameter, ReflectionProperty, ReflectionExtension).
Para maiores detalhes acessem o manual oficial: http://br2.php.net/manual/pt_BR/language.oop5.reflection.php
Sem mais, Rodrigo.
Excelente para quem quiser "documentar" sua aplicação de maneira personalizada.
Claro que para criar docs é mais fácil usar o phpDocumentor, mas com essa Api é possível construir ferramentas personalizadas.
Fazia tempo que não tinhamos artigos novos, parabéns por mais este Rodrigo - Corinthiano Sofredor!!
André Micocci - amenezes@gelre.com.br
Claro que para criar docs é mais fácil usar o phpDocumentor, mas com essa Api é possível construir ferramentas personalizadas.
Fazia tempo que não tinhamos artigos novos, parabéns por mais este Rodrigo - Corinthiano Sofredor!!
André Micocci - amenezes@gelre.com.br
16/08/2005 10:33am
(~19 anos atrás)
legal, muito obrigado pelo artigo
vai ajudar muito