Caso queira criar versões especializdas das classes nativas(digamos, para criar HTML colorido quando sendo exportado, tendo variáveis membros de fácil acesso ao invés de métodos ou tendo métodos utilitários), você pode extendê-las.
Exemplo #1 Extendendo classe nativas
<?php
/**
* Minha Classe Reflection_Method
*/
class My_Reflection_Method extends ReflectionMethod
{
public $visibility = array();
public function __construct($o, $m)
{
parent::__construct($o, $m);
$this->visibility = Reflection::getModifierNames($this->getModifiers());
}
}
/**
* Demonstração classe #1
*
*/
class T {
protected function x() {}
}
/**
* Demonstração classe #2
*
*/
class U extends T {
function x() {}
}
// Imprimir as informações
var_dump(new My_Reflection_Method('U', 'x'));
?>
O exemplo acima irá imprimir algo similar à:
object(My_Reflection_Method)#1 (3) { ["visibility"]=> array(1) { [0]=> string(6) "public" } ["name"]=> string(1) "x" ["class"]=> string(1) "U" }
Se construtor for sobrescrito, lembre-se de chamar o contrutor pai antes de qualquer código que você adicionar. Se isto não for feito irá resultar no seguinte erro: Fatal error: Internal error: Failed to retrieve the reflection object