Как переопределить уже объявленные функции и классы PHP(>=5.5)?
Суть в заголовке. Runkit и APD не предлагать. Runkit еще вроде как пашет, чего нельзя сказать об APD(даже пачти не помогают). Также не предлагать хаки с неймспейсами.
Если цель тестирование - смотри в направлении Stub и Mock объектов, из PHPUint, Codeception, Mockery. Если же для рантайма в продакшне - вероятность выстрелить себе в ногу 99.9999...%, ты не должен этого хотеть.
Мне необходимо создавать события при вызове некоторых функций/методов и при определенных условиях бросать исключения. Работу самих функций/методов как таковых мне менять не надо. Если есть дополнение, которое позволяет такое сделать, буду очень рад узнать название.
Reflection API в помощь. Если я правильно понял, что вы хотите сделать - лучше всего создать классы обертки (можно в виде наследников), которые будут реализовывать конкретно ваш функционал. К приватным методам/свойствам сможете достучаться через Reflection API.
Вы пытаетесь решить архитекрурный пр**б костылями из обогащенного урана.))
Тут могу предложить 2 решения:
1. Переделать архитектуру, что бы таких глупостей не требовалось.
2. Использовать предварительную модификацию кода, через token_get_all с явной модификацией кода и сохранением его во временную директорию, из которой он будет работать.
index0h:
1) Это таки не ошибка архитектуры. Мне нужно это, чтобы никто не мог вызвать функцию, не возбудив хэндлер.
2) Не прокатит. Код может быть обфусцирован, также есть различные callback функции.
ppa > 1) Это таки не ошибка архитектуры. Мне нужно это, чтобы никто не мог вызвать функцию, не возбудив хэндлер.
Дык приватные методы для этого есть.
> Код может быть обфусцирован, также есть различные callback функции.
В чем проблема то? Смысл в том, что бы заменить:
myfunction($param1, $param2)
на
pleaseRunMyHandlerForFunction('myfunction', [$param1, $param2]);myfunction($param1, $param2);
1) есть стандартные функции типа fopen, при вызове которых обязательно надо создавать событие.
2) будет что-нибудь типа: $func($somevar), где $func = 'file_get_contents' и будет браться, предположим, из базы. и никакой анализатор не поможет.
С удивлением обнаружил, что Runkit еще обновляется, а он более чем подходит. Уже сделал, работает, как надо. Сейчас проверю, что там с производительностью.