Существует структура под названием Идти! Аспектно-ориентированный фреймворк для PHP
И он сделан на простом PHP, для работы не требуются PECL-расширения и DI-контейнеры.
Более того, его можно интегрировать с любыми существующими PHP-фреймворками и библиотеками (с дополнительной конфигурацией или без нее).
И нет никаких проверок во время выполнения контрольных точек, нет разбора аннотаций во время выполнения, нет методов evals и __call, нет медленных прокси и call_user_func_array (). Быстрый процесс начальной загрузки (2-20 мс) и вызов рекомендаций.
Так что я очень впечатлен, но я хочу знать, как это на самом деле работает?
Эти моменты, которые я перечислил здесь …
Я посмотрел на github и на официальном сайте, и некоторые другие статьи, но не смог найти никакой конкретной информации о том, как это работает (в целом и в частности).
Я так хочу знать, как это работает? Как это было реализовано?
Эта структура использует много скрытых трюков для выполнения своей работы, но если мы посмотрим с высоты птичьего полета, то процесс можно описать следующим образом:
Foo
загружается из файла Foo.php
AOP оборачивает его в специальный поток фильтра следующим образом: include 'php://filter/read=go.source.transforming.loader/resource=Foo.php';
, Вы можете прочитать больше об этом фильтре потока в руководство ‘php: // stream’Foo
: переименован в Foo__AopProxied
и новый файл с классом Foo extends Foo__AopProxied
генерируется в кеше.Конечно, это лишь небольшой объем информации, потому что реализация AOP в чистом PHP была очень сложной задачей, и я много раз пытался найти подходящее решение, поэтому может быть интересно покопаться в исходном коде, чтобы обнаружить скрытые драгоценные камни 🙂 Немного информации также доступна в моем PhpSerbia говорит о сквозных проблемах в PHP, Вы можете посмотреть его для лучшего понимания (извините за мой английский).
Также мы сейчас работаем над документацией для фреймворка, поэтому, если вы хотите улучшить его, просто отправьте нам PR на официальная документация.
Вам также следует использовать плагин PhpStorm, который предоставляет множество функций для разработчиков, которые используют AOP в проектах PHP.
Других решений пока нет …