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 Rogério BragilRecursos de Reflexão no PHP
por Rogério Bragil
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

Inspecionar um objeto ou classe é muito interessante para aplicações OOP no PHP, particulamente em persistência de objetos. O PHP expande as opções para esse tipo de programação com as novas versões PHP5, e iremos dar uma rápida descrição sobre essas funções.
Vote aqui!
Média de Votos Atual: 4.22
Total de Votos: 9
Nota:   

Podemos definir reflexão como a capacidade de obter informações de classes e objetos em tempo de execução. Por exemplo, você pode obter a lista dos nomes dos atributos de um objeto e seus valores, obter o nome dos métodos de um objeto, verificar se uma determinada
classe foi definida, verificar se um objeto é filho de determinada classe, entre outros.

Em determinadas situações, usar reflexão é o único meio de resolver o problema. Podemos dar como exemplo a persistência de objetos. Através de reflexão, você obtém os nomes e valores dos atributos do objeto, para poder persistir da forma como quiser. Quando o
objeto for carregado novamente, basta pegar esses nomes e valores que estão gravados e atribuir ao objeto recém carregado. Esse é apenas um exemplo da utilidade do recurso de reflexão.

A linguagem PHP possui algumas funções para este fim, não com tantos recursos como a API de reflexão de Java, mas já quebra um galho em determinadas situações.

get_class($objeto)

A função get_class() retorna uma string contendo o nome da classe do objeto passado como parâmetro:


<?php
// classe exemplo
class Exemplo
{
    function 
hello()
    {
        echo 
"Olá, PHP!";
    }
}

// instanciando
$ex = new Exemplo();
$nomeclasse get_class($ex);
echo 
$nomeclasse;
?>


Saída:

Exemplo


class_exists($nomedaclasse)

Retorna true se a classe de nome $nomedaclasse existir e false caso contrário.

interface_exists($nomedainterface) (PHP5)

Retorna true se a interface de nome $nomedainterface existir e false caso contrário.

get_declared_classes()

Retorna um array com os nomes das classes já definidas no script em execução(inclusive as classes pré-definidas de PHP)

get_declared_interfaces() (PHP5)

Retorna um array com os nomes das interfaces já definidas no script em execução.



<< Anterior 1 2 3 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

Reflection no Php5
publicado por Rodrigo Rodrigues Esse usuário pertence aos 50 usuários mais ativos do site - 2005-05-20 13:05:39

Parabéns pelo artigo mas apartir do Php 5 já existe uma ótima API para reflexão, tão boa(se bobear até melhor) quanto ao que existe para o Java.

Esses comandos que vc usou auxiliam para ter mais detalhes das classes(objetos), reflexão mesmo só apartir no Php5, para maiores detalhes acesse "http://br2.php.net/manual/pt_BR/language.oop5.reflection.php".

API
publicado por Rogério Bragil - 2005-05-20 16:55:01

Hehehe, nem sabia...

Passa o link do site aí prá gente ver...

Valeu!


bragil

API
publicado por Rogério Bragil - 2005-05-20 16:57:37

Ah, sim, para reflexão ao pé da letra faltam muitos recursos... Mas quero dar uma olhada nessa API aí prá ver como que é...


Valeu!

Reflexão X Velocidade
publicado por Adler Medrado - 2005-07-09 22:11:45

Eu tenho uma classe aonde eu necessito gerar um comando SQL dinamicamente. Então eu usei a classe ReflectionClass da API de Reflexão para pegar todos os atributos da minha classe e assim poder gerar um comando SQL dinamicamente.
Mas tenho dúvidas em relação à velocidade. Isso não tornaria o script mais lento??
O meu codigo seria basicamente isso:
echo "<PRE>";
$reflection = new ReflectionClass(__CLASS__);
$defaults = $reflection->getdefaultProperties();
print_r($defaults);
echo "</PRE>";

Reflection
publicado por Rogério Bragil - 2005-07-11 12:11:21

Adler, quando eu escrevi este tutorial eu não conhecia ainda a nova API de Reflection do PHP5. Quando sobrou tempo eu dei uma estudadinha, e devo admitir que dá prá fazer muitas coisas que "na unha" seria bem difícil.
Eu criei uma classe DAO, que recebe um objeto e monta as queries de insert, update e delete.

Acho que não interfere na performance não, eu fiz alguns testes e não notei nada de errado.

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.557 segundos