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
(~20 anos atrás)
legal, muito obrigado pelo artigo
vai ajudar muito