Pour créer une version spéciale de la classe interne (par exemple, pour créer une portion HTML mis en évidence lors de l'export, pour avoir un accès facile aux variables des membres au lieu des variables des méthodes, ou bien pour avoir des méthodes utiles), il est possible de étendre la classe principale.
Exemple #1 Étendre les classes internes
<?php
/**
* Ma 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());
}
}
/**
* Demo classe #1
*
*/
class T {
protected function x() {}
}
/**
* Demo classe #2
*
*/
class U extends T {
function x() {}
}
// Affichage des informations
var_dump(new My_Reflection_Method('U', 'x'));
?>Résultat de l'exemple ci-dessus est similaire à :
object(My_Reflection_Method)#1 (3) {
["visibility"]=>
array(1) {
[0]=>
string(6) "public"
}
["name"]=>
string(1) "x"
["class"]=>
string(1) "U"
}
Si l'on écrasez le constructeur, il faut se rappeler d'appeler
le constructeur parent avant d'insérer le moindre code.
Si on ne le faites pas, voici ce qui arrivera :
Fatal error: Internal error: Failed to retrieve the reflection object