to read, 4.11K views since 2016.10.11 Read in english

Ввод в рефлексию в PHP

Каждый php-разработчик хотя бы раз пытался разработать собственный фреймворк, используя такие классные слова, как mvc, active record, ORM, logger и так далее.

Кто-то добьется успеха в этой задаче, а кто-то нет. Если вы написали свой первый фреймворк, скорее всего, вам следует переписать его почти полностью, когда вы захотите какую-то новую функцию или измените поведение существующей.

Причина этого заключается в том, что компоненты вашей структуры тесно связаны друг с другом, и изменения в любой из них потребуют изменений в зависимых частях. Если вы хотите написать фреймворк с компонентами со слабой связью, то для достижения этого мало распространенных технических средств:

записывать реализацию компонентов на основе интерфейса или наследования, использовать сервисный локатор и / или внедрение зависимостей, когда возможно включить горячую замену компонентов и так далее.

И это та часть, где проявляется все величие отражения API. Используя API отражения, вы можете делать много вещей на фоне вашего реального кода: автоматически перетаскивать зависимые библиотеки в контроллеры, основанные на типах библиотек, получать все интерфейсы, которые реализует некоторый класс, получать все имена полей некоторого класса (особенно эффективно, когда вы Вы планируете написать ORM или какой-нибудь автоматически сгенерированный CRUD), получить информацию обо всех функциях класса и о некоторых.

Откровенно говоря, рефлексия позволяет вам даже больше, чем вы ожидали от нее: создавать экземпляры классов с закрытыми конструкторами, устанавливать значения приватных свойств и, конечно, читать их.

Особенно это заметно в рефлексии - она ​​позволяет вам анализировать и получать все документы ваших классов: документы классов, документы свойств и методов. Используя данные документа, вы можете добиться еще большей гибкости при создании вашей системы. Например, вы можете записать в праве доступа к документу действия уровня контроллера и опустить дополнительный файл с правами доступа для всех действий. :

/**
* @AllowGroup('admins')
*/
pubic function indexAction() {

Можно много чего сказать об рефлексии в php, поэтому я решил разделить этот пост на несколько частей, в следующей части мы попробуем получим общие данные о каком-то классе: список его методов и полей.

Read next article Получаем информацию о классе при помощи Reflection Api в PHP in course Reflection in PHP