Recursos de Reflexão no PHP
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:
Saída:
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:
Saída:
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:
Saída:
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
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
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>";
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
(~19 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!
Valeu!
20/05/2005 4:57pm
(~19 anos atrás)
Hehehe, nem sabia...
Passa o link do site aí prá gente ver...
Valeu!
bragil
Passa o link do site aí prá gente ver...
Valeu!
bragil
20/05/2005 4:55pm
(~19 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".
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
(~19 anos atrás)
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.