-1

Recursos de Reflexão no PHP

criado por Rogério Bragil em 20/05/2005 10:13am
get_class_vars($nomeclasse)

A função get_class_vars($nomeclasse) retorna um array associativo contendo os nomes dos atributos es os valores de inicialização da classe de nome $nomeclasse. Exemplo:

<?php
class Exemplo
{
   
var $atrib1; // não inicializado
   
var $atrib2 = "olá";
   
var $atrib3 = "php";

   
function hello()
   
{
        echo
"Olá, PHP!";
   
}
}

print_r
(get_class_vars("Exemplo"));
?>

Saída:
Array
 
(
     
[atrib1] =>
     
[atrib2] => olá
     
[atrib3] => php
 
)

get_object_vars($objeto)

Semelhante a get_class_vars(), só que recebe uma referência de um objeto e retorna um array associativo com os nomes dos atributos e os seus valores (não apenas os valores de inicialização, como em get_class_vars()).

Exemplo:
<?php
class Exemplo
{
   
var $a;  
   
var $b;
   
var $c;

   
function atribui()
   
{
        $this
->a = 1;
        $this
->b = 54;
        $this
->c = 123;
   
}
}

$p
= new Exemplo();
$p
->atribui();
print_r
(get_object_vars($p));
?>

Saída:
Array
 
(
     
[a] => 1
     
[b] => 54
     
[c] => 123
 
)

get_class_methods($objeto)

Retorna um array contendo os nomes dos métodos da referência $objeto (o argumento também pode ser o nome da classe).

Exemplo:
<?php
class Exemplo
{
   
function metodo_a()
   
{
        echo
"A";
   
}

   
function metodo_b()
   
{
        echo
"B";
   
}
}

$ex
= new Exemplo();
$array
= get_class_methods($ex);
foreach($array as $metodos) {
    echo $metodos.
"<br>";
}
?>

Saída:
 
metodo_a
metodo_b

method_exists($objeto, $nomemetodo)

Retorna true se $objeto possui um método com o nome $nomemetodo e false caso contrário.


Bem, é isso. Espero que tenha trazido um algo mais para o conhecimento da comunidade PHP.

bragil

Comentários:

Mostrando 1 - 5 de 5 comentários
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.
11/07/2005 12:11pm (~20 anos atrás)

Adler Medrado disse:
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>";
09/07/2005 10:11pm (~20 anos atrás)

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!
20/05/2005 4:57pm (~20 anos atrás)

Hehehe, nem sabia...

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

Valeu!


bragil
20/05/2005 4:55pm (~20 anos atrás)

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".
20/05/2005 1:05pm (~20 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)