Ничто не предвещало ничего (с)
После 5 лет молчания и отсутствия развития, runkit разродился новой версией (даже двумя) и, потенциально, новым мейнтейнером (dzenovich).
Пока в официальном pecl-репозитории он отсутствует, но когда это нас останавливало:
pecl install github.com/downloads/zenovich/runkit/runkit-1.0.2.tgz
Код проекта находится по адресу: github.com/zenovich/runkit.
Для тех, кто не в курсе, runkit — это магическая штуковина, которая позволяет изменять РНР-код на лету. Помимо этого он умеет запускать РНР-код в отдельном окружении, создавая уютную "песочницу", которая не сделает «ой» основному коду (для этого нужно собирать PHP с поддержкой тредов, т.е. --enable-maintainer-zts для configure).
Что нового добавилось:
- Создание и подмена статических методов
- Импорт статических свойств
- Возможность использовать замыкания в «песочнице»
- Полная поддержка ветки 5.3, вплоть до 5.3.3. Уиии!
- Исправлено множество багов и фич
Можно по разному относится к runtime замене кода, но присутствие инструмента лучше, чем его отсутствие. Из областей применения, которые сразу приходят на ум: замена мокам и стабам, точечные правки во внутренностях библиотек.
UPD: Текст был дополнен и исправлен, тем самым легендарным, а местами даже краснознаменным, dzenovich.
UPD2: Пример использования runkit в PHPDaemon. Там же и небольшое описание возможностей runkit.