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: