Короче говоря, я работаю с устаревшей кодовой базой, которая интенсивно использует встроенную в PHP call_user_func_array функцию.Я пытаюсь заставить его работать с PHP 5.3 (обновление с 5.2), но столкнулся с проблемой, описанной здесь (в разделе «Передача без массивов»):
http://sixohthree.com/1486/migrating-to-php-5-3-call_user_func_array
В двух словах, проблема в том, что между версиями PHP 5.2 и 5.3 поведение этой функции было изменено, так что она в основном ничего не делает и возвращает NULL
, если второй параметр не является правильным массивом / объектом / ассоциативным массивом.5.2 не сделал этого, и поэтому кодовая база, с которой я работаю, не прилагает усилий к тому, чтобы передать параметр правильного типа.Это вызывает проблемы.
Чтобы исправить это, я мог бы следовать инструкциям в сообщении в блоге и выслеживать каждый отдельный вызов call_user_func_array
в базе кода и исправлять их, но это было бы чрезвычайно утомительно.Кроме того, я заметил, что в PHP есть встроенный API-вызов override_function , который можно использовать для переопределения встроенных функций.Это удобно, но я хочу больше походить на расширение встроенной функции.
В идеале мне хотелось бы иметь возможность заменить реализацию call_user_func_array
чем-то примерно таким:
function call_user_func_array($method, $params) {
$params = is_array($params) ? $params : array($params);
return old_call_user_func_array($method, $params);
}
... где old_call_user_func_array
- встроеннаяcall_user_func_array
функция.
Возможно ли это, и если да, то как?