PHP: Reflection API

PHP: Reflection API

При разработке с помощью ООП часто приходится использовать служебные функции, которые предоставляют какую то информацию о классах и их методах, например такие:

  • class_exists()
  • method_exists()
  • get_declared_class()
  • get_class()
  • get_class_methods()
  • ...

Я не буду описывать в данной статье эти функции, они и так слишком известные ( ну, а если всё же... то курим мануал: ). Но есть одно но - они довольно ограничены и дают скромную информацию о том, или ином классе или методе. Как правило это достаточно, но что делать если нужен более широкий функционал по работе с классами и их методами.

reflection API

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 )

Конвертация объекта в строку.

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


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



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