PHP: Reflection API — Reflection

PHP: Reflection API

Скажем так, это основной отражатель 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

 

Возможно Вас заинтересуют эти материалы

PHP: Reflection API — ReflectionExtension

Класс ReflectionExtension предоставляет методы для работы с расширениями языка. Эта заметка последняя в цикле о

PHP: Reflection API — ReflectionFunction

Класс ReflectionFunction предоставляет методы для работы с функциями языка и функциями, определёнными пользователем в коде,

PHP: Reflection API — ReflectionParameter

Класс ReflectionParameter предоставляет методы для работы с параметрами методов классов, а так же с параметрами