Extending the reflection classes

In case you want to create specialized versions of the built-in classes (say, for creating colorized HTML when being exported, having easy-access member variables instead of methods or having utility methods), you may go ahead and extend them.

Example 14-8. Extending the built-in classes

<?php
  /**
   * My ReflectionMethod class
   *
   */
  class My_ReflectionMethod extends ReflectionMethod { 
    public $visibility= '';
    
    public function __construct($o, $m) { 
      parent::__construct($o, $m); 
      $this->visibility= Reflection::getModifierNames($this->getModifiers()); 
    } 
  } 
  
  /**
   * Demo class #1
   *
   */
  class T { 
    protected function x() {} 
  }
  
  /**
   * Demo class #2
   *
   */
  class U extends T { 
    function x() {}
  } 
  
  // Print out information
  var_dump(new My_ReflectionMethod('U', 'x'));
?>

Note: Caution: If you're overwriting the constructor, remember to call the parent's constructor _before_ any code you insert. Failing to do so will result in the following: Fatal error: Internal error: Failed to retrieve the reflection object