Как перехватить код в PHP динамически во время выполнения?

Мне нужен инструмент PHP, расширение или что-то такое, что позволит мне динамически анализировать весь код, выполняемый в сценарии PHP (не инструмент статического анализа), например:

  • У меня есть интерфейс с некоторыми методами и некоторыми классами, которые реализуют этот интерфейс, мне нужно было бы перехватить вызов метода интерфейса во время выполнения, посмотреть, какая реализация интерфейса вызвала реализованный метод (класс с пространством имен), что являются значениями аргументов, что делает метод, что является возвращаемым значением, что было выполнено до вызова этого метода, что будет выполнено после и т.д...;
  • У меня есть экземпляр объекта, который записывает и читает его свойства, мне нужно было бы перехватить чтение / запись свойства, присвоение переменной причудливым способом, как описано выше для методов (посмотрите, что было выполнено до, что будет выполнено после, так далее...);
  • Перехватить утверждение, например echo оператор, посмотрите, что произошло перед оператором, каково выражение оператора (с интерполяцией переменных), что будет выполняться после этого оператора;
  • Проанализируйте условие if-else, if-else if, for, while, do-while, case-switch и т. Д...., чтобы определить, какие операнды были использованы и какие были их значения, какие операторы использовались и т. Д.,

Итак, как то так. Является ли это возможным? Я думал, что это может быть реализовано с помощью PHP ticks, но мне кажется, что он немного не подходит для этой цели или, что лучше, невозможно достичь цели (если у меня есть declare(ticks=1) и я регистрирую тиковый обработчик, я могу вызывать его каждый раз, когда выполняется оператор, но не для ifs, fors, whiles и т. д., и я не могу проанализировать исполняемый код...)

Не могли бы вы мне что-нибудь посоветовать?

Спасибо за внимание!

РЕДАКТИРОВАТЬ: я не ищу отладчик, мне нужно что-то, с чем я могу иметь дело в коде, например, проанализировать это и выдать исключение, если что-то не так, как ожидалось.

0 ответов

Другие вопросы по тегам