PHP: Reflection API - ReflectionExtension

PHP: Reflection API - ReflectionExtension

Класс ReflectionExtension предоставляет методы для работы с расширениями языка. Эта заметка последняя в цикле о Reflection API. В дальнейшем я планирую сделать запись, как с пользой можно применить этот замечательный API

ReflectionExtension implements Reflector

/* Свойства */

  • $ReflectionFunction->name

/* Методы */

ReflectionExtension::__construct ( string $name )

Конструктор класса. Принимает параметр строку - имя расширения:

var_dump( new ReflectionExtension('PDO') );

результат:

object(ReflectionExtension) #1 (1) {
  ["name"]= > string(3)"PDO"
}
public static string ReflectionExtension::export ( string $name [, string $return = false ] )

Как всегда получить информацию можно и без создания экземпляра объекта класса ReflectionExtension, воспользовавшись статичным методом export:

var_dump( ReflectionExtension::export('PDO') );

Вывод очень объёмный - я его привёл не полностью:

Extension [  extension #25 PDO version 1.0.4dev ] {

  - Dependencies {
    Dependency [ spl (Required) ]
  }

  - Functions {
    Function [  function pdo_drivers ] {

      - Parameters [0] {
      }
    }
  }

  - Classes [4] {
    Class [  class PDOException extends RuntimeException ] {

      - Constants [0] {
      }

      - Static properties [0] {
      }

      - Static methods [0] {
      }

      - Properties [5] {
        Property [  protected $message ]
        Property [  protected $code ]
        Property [  protected $file ]
        Property [  protected $line ]
        Property [  public $errorInfo ]
      }

      - Methods [9] {
        Method [  public method __construct ] {

          - Parameters [3] {
            Parameter #0 [  $message ]
            Parameter #1 [  $code ]
            Parameter #2 [  $previous ]
          }
        } ...
public array ReflectionExtension::getClasses ( void )

Получает список классов расширения. Возвращает массив объектов ReflectionClass, по одному для каждого класса расширения. Если ни один класс не определён, возвращается пустой массив. Для наглядного примера возьмём и передадим как параметр... сам Reflection :

$ext = new ReflectionExtension('Reflection');
var_dump( $ext->getClasses() );

выведет:

Array
(
    [ReflectionException] => ReflectionClass Object
    (
        [name] => ReflectionException
    )

    [Reflection] => ReflectionClass Object
    (
        [name] => Reflection
    )

    [Reflector] => ReflectionClass Object
    (
        [name] => Reflector
    )

    [ReflectionFunctionAbstract] => ReflectionClass Object
    (
        [name] => ReflectionFunctionAbstract
    )

    [ReflectionFunction] => ReflectionClass Object
    (
        [name] => ReflectionFunction
    )

    [ReflectionParameter] => ReflectionClass Object
    (
        [name] => ReflectionParameter
    )

    [ReflectionMethod] => ReflectionClass Object
    (
        [name] => ReflectionMethod
    )

    [ReflectionClass] => ReflectionClass Object
    (
        [name] => ReflectionClass
    )

    [ReflectionObject] => ReflectionClass Object
    (
        [name] => ReflectionObject
    )

    [ReflectionProperty] => ReflectionClass Object
    (
        [name] => ReflectionProperty
    )

    [ReflectionExtension] => ReflectionClass Object
    (
        [name] => ReflectionExtension
    )
)
public array ReflectionExtension::getClassNames ( void )

Получает список имен классов, определенных в расширении. Возвращает массив имен классов, определенных в расширении. Если ни один класс не определён, возвращается пустой массив. Возьмём для наглядности так же класс Reflection:

$ext = new ReflectionExtension('Reflection');
var_dump( $ext->getClassNames() );

выведет:

array(11) {
  [0]=> string(19) "ReflectionException"
  [1]=> string(10) "Reflection"
  [2]=> string(9) "Reflector"
  [3]=> string(26) "ReflectionFunctionAbstract"
  [4]=> string(18) "ReflectionFunction"
  [5]=> string(19) "ReflectionParameter"
  [6]=> string(16) "ReflectionMethod"
  [7]=> string(15) "ReflectionClass"
  [8]=> string(16) "ReflectionObject"
  [9]=> string(18) "ReflectionProperty"
  [10]=> string(19) "ReflectionExtension"
}
public array ReflectionExtension::getConstants ( void )

Получает массив констант, определённых в расширении:

$ext = new ReflectionExtension('DOM');
var_dump( $ext->getConstants() );

выведет:

array(45) {
  ["XML_ELEMENT_NODE"]=> int(1)
  ["XML_ATTRIBUTE_NODE"]=> int(2)
  ["XML_TEXT_NODE"]=> int(3)
  ["XML_CDATA_SECTION_NODE"]=> int(4)
  ["XML_ENTITY_REF_NODE"]=> int(5)
  ["XML_ENTITY_NODE"]=> int(6)
  ["XML_PI_NODE"]=> int(7)
  ["XML_COMMENT_NODE"]=> int(8)
  ["XML_DOCUMENT_NODE"]=> int(9)
  ["XML_DOCUMENT_TYPE_NODE"]=> int(10)
  ["XML_DOCUMENT_FRAG_NODE"]=> int(11)
  ["XML_NOTATION_NODE"]=> int(12)
  ["XML_HTML_DOCUMENT_NODE"]=> int(13)
  ...
}
public array ReflectionExtension::getDependencies ( void )

Получает зависимости, перечисляет обязательные и конфликтующие зависимости. Вернёт ассоциативный массив с зависимостями в качестве ключей и в качестве значения статусы зависимостей: Required, Optional, Conflicts.

$ext = new ReflectionExtension('DOM');
var_dump( $ext->getDependencies() );

выведет:

array(2) {
  ["libxml"]=> string(8) "Required"
  ["domxml"]=> string(9) "Conflicts"
}
public array ReflectionExtension::getFunctions ( void )

Получить функции определенные в расширении. Вернёт ассоциативный массив объектов ReflectionFunction, с ключами - именами функций, определенных в расширении. Если в расширении не определены ни какие функции, возвращается пустой массив:


выведет:

array(18) {
  ["curl_init"]=> &object(ReflectionFunction)#2 (1) {
    ["name"]=> string(9) "curl_init"
  }
  ["curl_copy_handle"]=> &object(ReflectionFunction)#3 (1) {
    ["name"]=> string(16) "curl_copy_handle"
  }
  ["curl_version"]=> &object(ReflectionFunction)#4 (1) {
    ["name"]=> string(12) "curl_version"
  }
  ["curl_setopt"]=> &object(ReflectionFunction)#5 (1) {
    ["name"]=> string(11) "curl_setopt"
  }
  ...
}
public array ReflectionExtension::getINIEntries ( void )

Получить директивы .ini - файла, определённых для расширения. Вернёт ассоциативный массив с INI-директивами в качестве ключей с их определенными значениями в качестве значений:

$ext = new ReflectionExtension('MySQL');
var_dump( $ext->getINIEntries() );

выведет:

array(12) {
  ["mysql.allow_persistent"]=> string(1) "1"
  ["mysql.max_persistent"]=> string(2) "-1"
  ["mysql.max_links"]=> string(2) "-1"
  ["mysql.default_host"]=> string(0) ""
  ["mysql.default_user"]=> string(0) ""
  ["mysql.default_password"]=> string(0) ""
  ["mysql.default_port"]=> string(0) ""
  ["mysql.default_socket"]=> NULL
  ["mysql.connect_timeout"]=> string(2) "60"
  ["mysql.trace_mode"]=> string(0) ""
  ["mysql.allow_local_infile"]=> string(1) "1"
  ["mysql.cache_size"]=> string(4) "2000"
}
public string ReflectionExtension::getName ( void )

Метод позволяет получить название расширения. Вернёт строку.

public string ReflectionExtension::getVersion ( void )

Метод позволяет получить версию расширения.

public void ReflectionExtension::info ( void )

Позволяет получить информацию о расширении. Это будет часть инфы, касающаяся расширения из вывода функции phpinfo()

public void ReflectionExtension::isPersistent ( void )
public void ReflectionExtension::isTemporary ( void )

Последние два метода на своём PHP 5.2 я так и не смог запустить - вылеты с ошибкой: Fatal error Call to undefined method ( несуществующий метод ).

Ну, вот насколько смог я осветил вам функционал Reflection API на нашем "великом и могучем". Класс ReflectionException я рассматривать не стал - там всё стандартно (ну, кроме его типа конечно) и ещё я не стал в каждом классе указывать методы __clone() и __toString() я надеюсь вам они известны, если нет прошу в , откуда кстати и взята эта информация.

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


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



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