PHP: Reflection API - Reflection

PHP: Reflection API - Reflection

Скажем так, это основной отражатель Reflection API. Может вывести информацию обо всём, что расширяет интерфейс Reflector По сути имеет лишь пару методов, описанных ниже.

/* Methods */

public static void export ( Reflector $reflector [, bool $return = false ] )

Статичный метод (Присутствует во всех экспортируемыми классах Reflection API). Предоставляет подробную информацию об исследуемой абстракции (класс, метод, объект, функция или расширение ), второй параметр как правило указывает куды девать вывод функции: на экран или вернуть строкой.

Один из вариантов получить информацию, например о классе, при помощи метода Reflection::export() нужно: во - первых создать "рефлектор" при помощи класса ReflectionClass, передав ему строкой имя класса, который хотим исследовать, а затем передать экзкемпляр получившегося объекта в статичный метод Reflection::export() :

  
   $reflector = new ReflectionClass('JPlugin');
   Reflection::export($reflector);
   
  

Вывод будет таким ( я его чуток обрезал снизу. Это Joomla класс JFolder ):

  **
   * A Folder handling class
   *
   * @static
   * @package 	Joomla.Framework
   * @subpackage	FileSystem
   * @since		1.5
   */
  Class [  class JFolder ] {
    @@ Z:\home\joomtest.loc\www\libraries\joomla\filesystem\folder.php 28-571
  
    - Constants [0] {
    }
  
    - Static properties [0] {
    }
  
    - Static methods [0] {
    }
  
    - Properties [0] {
    }
  
    - Methods [9] {
      /**
     * Copy a folder.
     *
     * @param	string	The path to the source folder.
     * @param	string	The path to the destination folder.
     * @param	string	An optional base path to prefix to the file names.
     * @param	boolean	Optionally force folder/file overwrites.
     * @return	mixed	JError object on failure or boolean True on success.
     * @since	1.5
     */
      Method [  public method copy ] {
        @@ Z:\home\joomtest.loc\www\libraries\joomla\filesystem\folder.php 40 - 129
  
        - Parameters [4] {
          Parameter #0 [  $src ]
          Parameter #1 [  $dest ]
          Parameter #2 [  $path = '' ]
          Parameter #3 [  $force = false ]
        }
      }
  
      /**
     * Create a folder -- and all necessary parent folders.
     *
     * @param string A path to create from the base path.
     * @param int Directory permissions to set for folders created.
     * @return boolean True if successful.
     * @since 1.5
     */
      Method [  public method create ] {
        @@ Z:\home\joomtest.loc\www\libraries\joomla\filesystem\folder.php 139 - 244
  
        - Parameters [2] {
          Parameter #0 [  $path = '' ]
          Parameter #1 [  $mode = 493 ]
        }
      }
  
      /**
     * Delete a folder.
     *
     * @param string The path to the folder to delete.
     * @return boolean True on success.
     * @since 1.5
     */
      Method [  public method delete ] {
        @@ Z:\home\joomtest.loc\www\libraries\joomla\filesystem\folder.php 253 - 328
  
        - Parameters [1] {
          Parameter #0 [  $path ]
        }
      }
  
      /**
     * Moves a folder.
     *
     * @param string The path to the source folder.
     * @param string The path to the destination folder.
     * @param string An optional base path to prefix to the file names.
     * @return mixed Error message on false or boolean true on success.
     * @since 1.5
     */
      Method [  public method move ] {
        @@ Z:\home\joomtest.loc\www\libraries\joomla\filesystem\folder.php 339 - 381
  
        - Parameters [3] {
          Parameter #0 [  $src ]
          Parameter #1 [  $dest ]
          Parameter #2 [  $path = '' ]
        }
      }
 	...
  

Как видим Reflection::export() вывел всю поднаготную.

public static array getModifierNames ( int $modifiers )

Метод позволяет получить имена модификаторов по номеру. Возвращает индексный массив, значениями, которого будут строки "final", "static", "abstract" и т.п. в зависимости от того, какое число придёт, как аргумент (здесь так же используется класс ReflectionMethod - он будет описан в последующих статьях):

<?php 

  class One
  {
      final public static function foo()
      {
          return;
      }
      public function bar()
      {
          return;
      }
  }
  
  $foo = new ReflectionMethod('One', 'foo');
  
  echo '<p>Модификаторы метода foo():</p>';
  echo '<p>'.$foo->getModifiers() . '</p>';
  echo '<p>'.implode(' ', Reflection::getModifierNames($foo->getModifiers())).'</p>';
  
  $bar = new ReflectionMethod('One', 'bar');
  
  echo '<p>Модификаторы метода bar():</p>';
  echo '<p>'.$bar->getModifiers() . '</p>';
  echo '<p>'.implode(' ', Reflection::getModifierNames($bar->getModifiers())).'</p>';

?>

Выведет следующую инфу:

Модификаторы метода foo():

261

final public static

Модификаторы метода bar():

65792

public

Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 57 гостей онлайн