Примеры

В документации по Reflection вы сможете встретить множество примеров, чаще всего в описании конструкторов классов.

Пример #1 Пример использования Reflection из shell (Терминала)

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

Результатом выполнения данного примера будет что-то подобное:

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

Коментарии

Автор:
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'
?>
2009-05-18 17:00:03
http://php5.kiev.ua/manual/ru/reflection.examples.html
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;

?>
2010-12-28 04:11:39
http://php5.kiev.ua/manual/ru/reflection.examples.html
Note: This is useful when you're manually parsing php by file before to get work done, wich is impossible to do without getting files externally.
Now you can parse without getting the file contents by using refection objects.
2017-02-19 04:18:00
http://php5.kiev.ua/manual/ru/reflection.examples.html

    Поддержать сайт на родительском проекте КГБ