Reflection no PHP

O PHP5 veio com uma API inteira nova de Reflection (não vou usar a tradução por não ser usada no dia-a-dia dos programadores). Com isso, foi dada a capacidade de se observar estruturas como classes, interfaces, funções e métodos em tempo de execução (runtime).

Veja um exemplo. Para o script abaixo:

class Post extends Page {
    private $title;
    private $url;
    private $date;
    function getTitle() {
        return $this->title;
    }
    function getUrl() {
        return $this->url;
    }
    function getDate() {
        return $this->url;
    }
}
$reflection = new ReflectionClass('Post');
var_dump($reflection->getMethods());
?>

A saída será:

array(3) { [0]=> &object(ReflectionMethod)#2 (2) { ["name"]=> string(8) "getTitle" ["class"]=> string(4) "Post" } [1]=> &object(ReflectionMethod)#3 (2) { ["name"]=> string(6) "getUrl" ["class"]=> string(4) "Post" } [2]=> &object(ReflectionMethod)#4 (2) { ["name"]=> string(7) "getDate" ["class"]=> string(4) "Post" } }

Ou seja, em tempo de execução o seu script consegue identificar através do método getMethods() quais são os métodos de uma determinada classe.
As possibilidades são imensas: você pode verificar para um determinado método a sua assinatura, pode verificar se uma classe é filha de outra, se implementa uma determinada interface…

É claro, o uso de Reflection não é comum no dia-a-dia de um programador, mas no caso de sistemas que geram códigos, no uso de metadados, Reflection é a saída (e não só no PHP, esse é um conceito quem vem de outras linguagens).

Links:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *