PHP: Reflection API — ReflectionExtension

PHP: Reflection API

Класс 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() я надеюсь вам они известны, если нет прошу в мануал, откуда кстати и взята эта информация.

 

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

PHP: Reflection API — ReflectionFunction

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

PHP: Reflection API — ReflectionParameter

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

PHP: Reflection API — ReflectionMethod

Класс ReflectionMethod предоставляет методы для работы с... методами классов. Мы можем: получить информацию модифицировать доступ,