PHP: Reflection API
При разработке с помощью ООП часто приходится использовать служебные функции, которые предоставляют какую то информацию о классах и их методах, например такие:
- class_exists()
- method_exists()
- get_declared_class()
- get_class()
- get_class_methods()
- ...
Я не буду описывать в данной статье эти функции, они и так слишком известные ( ну, а если всё же... то курим мануал: ). Но есть одно но - они довольно ограничены и дают скромную информацию о том, или ином классе или методе. Как правило это достаточно, но что делать если нужен более широкий функционал по работе с классами и их методами.
Reflection API
Итак знакомимся: программный интерфейс Reflection API для PHP версии 5 - то же, что пакет Java.lang.reflect для Java. Смысл его бытия примерно тот же, что и у функций, перечисленные выше, но он предоставляет гораздо более мощные средства для эффективной работы с ООП средствами PHP, вплоть до управления доступом.
Для работы с Reflection API для PHP не требуется никаких дополнительных библиотек. Это расширение является частью ядра PHP - его можно использовать в любой момент без каких либо предварительных действий. Reflection API не определяет никаких директив конфигураций в php.ini и не определяет никаких типов ресурсов. Каждый класс определяет свои собственные константы. Встроенные классы можно расширять, получая при этом функционал, заточенный под свои нужды. В общем всё чисто и приятно.
Инструментарий Reflection API
Инструментарий Reflection API - условно можно поделить на несколько частей, каждая из которых работает со своим уровнем. Уровни можно представить следующими абстракциями:
- Классы
- Свойства классов
- Методы классов
- Параметры методов классов
- Объекты
- Функции
- Расширения
Интерфейс Reflection API
Интерфейс Reflection API заточен не только под классы. Например, класс ReflectionFunction предоставляет информацию о заданной функции, а ReflectionExtension - о подключенных расширениях, ReflectionObject - об уже созданных объектах. Для работы со всем этим хозяйством Reflection API предоставляет следующие классы:
- Reflector
- Reflection
- ReflectionObject
- ReflectionClass
- ReflectionMethod
- ReflectionParameter
- ReflectionProperty
- ReflectionExtension
- ReflectionFunction
- ReflectionFunctionAbstract
- ReflectionException
Эта заметка открывает серию статей, посвящённых Reflection API. Я собираюсь разобрать все классы представленные выше, кроме абстрактного ReflectionFunctionAbstract, и класса ReflectionException - по той простой причине, что методы абстрактного класса я собираюсь описывать в контексте его наследников, а класс исключения - ничего исключительногов плане своего интерфейса не представляет. Итак, пойдём от корня:
Reflector interface
Reflector - этот интерфейс, реализуется всеми экспортируемыми классами Reflection. Он обязывает, расширяющие его классы реализоввывать следующие два метода:
abstract public static string Reflector::export ( void )
Статичный метод предоставляет информацию об исследуемой абстракции.
abstract public string __toString ( void )
Конвертация объекта в строку.
Class vs Struct
Delve into the details of Class vs Struct in C# with amarozka.dev's article.
amarozka.dev
На этой странице
Каталог водосточных систем на этой странице в магазине фасадных систем.
mpsk-sib.ru
Добавить комментарий
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.