PHP: Reflection API - ReflectionExtension
Класс ReflectionExtension предоставляет методы для работы с расширениями языка. Эта заметка последняя в цикле о Reflection API. В дальнейшем я планирую сделать запись, как с пользой можно применить этот замечательный API
ReflectionExtension implements Reflector
/* Свойства */
- $ReflectionFunction->name
/* Методы */
Конструктор класса. Принимает параметр строку - имя расширения:
var_dump( new ReflectionExtension('PDO') );
результат:
object(ReflectionExtension) #1 (1) {
["name"]= > string(3)"PDO"
}
Как всегда получить информацию можно и без создания экземпляра объекта класса 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 ]
}
} ...
Получает список классов расширения. Возвращает массив объектов 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
)
)
Получает список имен классов, определенных в расширении. Возвращает массив имен классов, определенных в расширении. Если ни один класс не определён, возвращается пустой массив. Возьмём для наглядности так же класс 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"
}
Получает массив констант, определённых в расширении:
$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)
...
}
Получает зависимости, перечисляет обязательные и конфликтующие зависимости. Вернёт ассоциативный массив с зависимостями в качестве ключей и в качестве значения статусы зависимостей: Required, Optional, Conflicts.
$ext = new ReflectionExtension('DOM');
var_dump( $ext->getDependencies() );
выведет:
array(2) {
["libxml"]=> string(8) "Required"
["domxml"]=> string(9) "Conflicts"
}
Получить функции определенные в расширении. Вернёт ассоциативный массив объектов 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"
}
...
}
Получить директивы .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"
}
Метод позволяет получить название расширения. Вернёт строку.
Метод позволяет получить версию расширения.
Позволяет получить информацию о расширении. Это будет часть инфы, касающаяся расширения из вывода функции phpinfo()
Последние два метода на своём PHP 5.2 я так и не смог запустить - вылеты с ошибкой: Fatal error Call to undefined method ( несуществующий метод ).
Ну, вот насколько смог я осветил вам функционал Reflection API на нашем "великом и могучем". Класс ReflectionException я рассматривать не стал - там всё стандартно (ну, кроме его типа конечно) и ещё я не стал в каждом классе указывать методы __clone() и __toString() я надеюсь вам они известны, если нет прошу в , откуда кстати и взята эта информация.
Ювелирные изделия Cartier оригинал продать тут
Продать кольцо Cartier ювелирные изделия Cartier оригинал продать тут.
infokam.su
Добавить комментарий
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.
PHP: Reflection API - ReflectionExtension
