Как перехватить код в PHP динамически во время выполнения?
Мне нужен инструмент PHP, расширение или что-то такое, что позволит мне динамически анализировать весь код, выполняемый в сценарии PHP (не инструмент статического анализа), например:
- У меня есть интерфейс с некоторыми методами и некоторыми классами, которые реализуют этот интерфейс, мне нужно было бы перехватить вызов метода интерфейса во время выполнения, посмотреть, какая реализация интерфейса вызвала реализованный метод (класс с пространством имен), что являются значениями аргументов, что делает метод, что является возвращаемым значением, что было выполнено до вызова этого метода, что будет выполнено после и т.д...;
- У меня есть экземпляр объекта, который записывает и читает его свойства, мне нужно было бы перехватить чтение / запись свойства, присвоение переменной причудливым способом, как описано выше для методов (посмотрите, что было выполнено до, что будет выполнено после, так далее...);
- Перехватить утверждение, например
echo
оператор, посмотрите, что произошло перед оператором, каково выражение оператора (с интерполяцией переменных), что будет выполняться после этого оператора; - Проанализируйте условие if-else, if-else if, for, while, do-while, case-switch и т. Д...., чтобы определить, какие операнды были использованы и какие были их значения, какие операторы использовались и т. Д.,
Итак, как то так. Является ли это возможным? Я думал, что это может быть реализовано с помощью PHP ticks
, но мне кажется, что он немного не подходит для этой цели или, что лучше, невозможно достичь цели (если у меня есть declare(ticks=1)
и я регистрирую тиковый обработчик, я могу вызывать его каждый раз, когда выполняется оператор, но не для ifs, fors, whiles и т. д., и я не могу проанализировать исполняемый код...)
Не могли бы вы мне что-нибудь посоветовать?
Спасибо за внимание!
РЕДАКТИРОВАТЬ: я не ищу отладчик, мне нужно что-то, с чем я могу иметь дело в коде, например, проанализировать это и выдать исключение, если что-то не так, как ожидалось.