Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

PHP para a World Wide Web

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

Juan Roldán Esse usuário pertence aos 50 usuários mais ativos do site
Pontos: 4687

Visite a página de perfil de Rodrigo RodriguesAPI de Reflexão no PHP5
por Rodrigo Rodrigues Esse usuário pertence aos 50 usuários mais ativos do site
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

A partir do PHP5 temos uma ótima API de reflexão, veja aqui seus conceitos básicos e como usá-la.
Vote aqui!
Média de Votos Atual: 9.00
Total de Votos: 2
Nota:   

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:


<?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: <b>{$exception->getMessage()}</b>.";
}
?>


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: <b>{$exception->getMessage()}</b>.";
}
?>


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: <b>{$reflectionMethod->getName()}</b><br>";
    echo 
"Tem os comentários: <b>{$reflectionMethod->getDocComment()}</b><br>";
    echo 
"Tem a quantidade de parametros: <b>{$reflectionMethod->getNumberOfParameters()}</b><br>";
    echo 
"Ele começa na linha: <b>{$reflectionMethod->getStartLine()}</b> e termina na linha: <b>{$reflectionMethod->getEndLine()}</b><br>";
    echo 
"Ele é um método privado: <b>".($reflectionMethod->isPrivate() ? "Sim" "Não")."</b>";
catch(Exception $exception) {
    echo 
"Aconteceu algum erro: <b>{$exception->getMessage()}</b>.";
}
?>


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: <b>{$reflectionFunction->getName()}</b><br>";
    echo 
"Tem os comentários: <b>{$reflectionFunction->getDocComment()}</b><br>";
    echo 
"Tem a quantidade de parametros: <b>{$reflectionFunction->getNumberOfParameters()}</b><br>";
    echo 
"Ela começa na linha: <b>{$reflectionFunction->getStartLine()}</b> e termina na linha: <b>{$reflectionFunction->getEndLine()}</b>.<br>";
catch(Exception $exception) {
    echo 
"Aconteceu algum erro: <b>{$exception->getMessage()}</b>.";
}
?>


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.



<< Anterior 1 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Documentação
publicado por André Micocci de Menezes - 2005-08-16 10:33:51

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

organização
publicado por hinom Esse usuário pertence aos 50 usuários mais ativos do site - 2005-08-17 07:32:48

hj mesmo eu estava pensando em algo parecido

legal, muito obrigado pelo artigo
vai ajudar muito


Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 0.399 segundos