PHP 8.5.0 Released!

Examples

Many examples exist within the Reflection documentation, typically within the __construct documentation for each class.

Example #1 Reflection Example from Shell (a Terminal)

$ php --rf strlen
$ php --rc finfo
$ php --re json
$ php --ri dom

The above example will output something similar to:

Function [ <internal:Core> function strlen ] {
 - Parameters [1] {
 Parameter #0 [ <required> $str ]
 }
}
Class [ <internal:fileinfo> class finfo ] {
 - Constants [0] {
 }
 - Static properties [0] {
 }
 - Static methods [0] {
 }
 - Properties [0] {
 }
 - Methods [4] {
 Method [ <internal:fileinfo, ctor> public method finfo ] {
 - Parameters [2] {
 Parameter #0 [ <optional> $options ]
 Parameter #1 [ <optional> $arg ]
 }
 }
 Method [ <internal:fileinfo> public method set_flags ] {
 - Parameters [1] {
 Parameter #0 [ <required> $options ]
 }
 }
 Method [ <internal:fileinfo> public method file ] {
 - Parameters [3] {
 Parameter #0 [ <required> $filename ]
 Parameter #1 [ <optional> $options ]
 Parameter #2 [ <optional> $context ]
 }
 }
 Method [ <internal:fileinfo> public method buffer ] {
 - Parameters [3] {
 Parameter #0 [ <required> $string ]
 Parameter #1 [ <optional> $options ]
 Parameter #2 [ <optional> $context ]
 }
 }
 }
}
Extension [ <persistent> extension #23 json version 1.2.1 ] {
 - Constants [10] {
 Constant [ integer JSON_HEX_TAG ] { 1 }
 Constant [ integer JSON_HEX_AMP ] { 2 }
 Constant [ integer JSON_HEX_APOS ] { 4 }
 Constant [ integer JSON_HEX_QUOT ] { 8 }
 Constant [ integer JSON_FORCE_OBJECT ] { 16 }
 Constant [ integer JSON_ERROR_NONE ] { 0 }
 Constant [ integer JSON_ERROR_DEPTH ] { 1 }
 Constant [ integer JSON_ERROR_STATE_MISMATCH ] { 2 }
 Constant [ integer JSON_ERROR_CTRL_CHAR ] { 3 }
 Constant [ integer JSON_ERROR_SYNTAX ] { 4 }
 }
 - Functions {
 Function [ <internal:json> function json_encode ] {
 - Parameters [2] {
 Parameter #0 [ <required> $value ]
 Parameter #1 [ <optional> $options ]
 }
 }
 Function [ <internal:json> function json_decode ] {
 - Parameters [3] {
 Parameter #0 [ <required> $json ]
 Parameter #1 [ <optional> $assoc ]
 Parameter #2 [ <optional> $depth ]
 }
 }
 Function [ <internal:json> function json_last_error ] {
 - Parameters [0] {
 }
 }
 }
}
dom
DOM/XML => enabled
DOM/XML API Version => 20031129
libxml Version => 2.7.3
HTML Support => enabled
XPath Support => enabled
XPointer Support => enabled
Schema Support => enabled
RelaxNG Support => enabled

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 2 notes

up
17
Kovin
16 years ago
If you want to use method closures and don't have PHP 5.3, perhaps you find useful the following function
<?php
 function get_method_closure($object,$method_name){
 if(method_exists(get_class($object),$method_name)){
 $func = create_function( '',
 '
 $args = func_get_args();
 static $object = NULL;
 
 /*
 * Check if this function is being called to set the static $object, which 
 * containts scope information to invoke the method
 */
 if(is_null($object) && count($args) && get_class($args[0])=="'.get_class($object).'"){
 $object = $args[0];
 return;
 }
 if(!is_null($object)){
 return call_user_func_array(array($object,"'.$method_name.'"),$args);
 }else{
 return FALSE;
 }'
 );
 
 //Initialize static $object
 $func($object);
 
 //Return closure
 return $func;
 }else{
 return false;
 } 
 }
?>
Here is how you would use it:
<?php
class foo{
 public function bar($foo){
 return strtolower($foo);
 }
}
$foo = new foo();
$f = get_method_closure($foo,'bar');
echo $f("BAR");//Prints 'bar'
?>
up
11
spectrum at bigmir dot net
14 years ago
Simple table generation using Reflection:
<?php
class A
{
 public $name = 'Vasiliy';
 public $text = 'Once upon a time';
}
class B
{
 public $name = 'Had bought a cat';
 public $text = 'named Valentine';
}
class grid
{
 public function build( $dataSource, $headers, $fields )
 {
 $result = '<table border="1">';
 $result .= $this -> make_head( $headers );
 
 foreach ($dataSource as $source):
 $class_name = get_class($source);
 if ( $class_name != FALSE ):
 $reflector = new ReflectionClass($source);
 echo 'Class "'. $class_name .'" found.<br />';
 $result .= $this -> make_row( $reflector, $fields, $source );
 endif;
 endforeach;
 
 $result .= '</table>';
 return $result;
 }
 
 private function make_head( $headers )
 {
 $result = '<tr>';
 foreach ( $headers as $header):
 $result .= "<th>$header</th>";
 endforeach;
 $result .= '</tr>';
 return $result;
 }
 
 private function make_row( $reflector, $fields, $source )
 {
 $result = '<tr>';
 foreach ( $fields as $field ):
 if ( $reflector -> hasProperty($field) ):
 $property = $reflector -> getProperty($field);
 $result .= '<td>'. $property -> getValue($source) .'</td>';
 endif;
 endforeach;
 $result .= '</tr>';
 return $result;
 }
}
$A = new A;
$B = new B;
$C = 'Test';
$dataSource = array( $A, $B, $C );
$headers = array( 'H1', 'H2' );
$fields = array( 'name', 'text' );
$grid = new grid;
$table = $grid -> build( $dataSource, $headers, $fields );
echo $table;
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /