У меня появилась блестящая идея использовать пользовательский обработчик ошибок, который привел меня в кроличью нору.
Следующий код дает (с пользовательским обработчиком ошибок и без него): Неустранимая ошибка: только переменные могут передаваться по ссылке
function foo(){
$b=array_pop(array("a","b","c"));
return $b;
}
print_r(foo());
Следующий код дает ( только с пользовательским обработчиком ошибок ): (2048) Только переменные должны передаваться по ссылке
function foo(){
$a=explode( '/' , 'a/b/c');
$c=array_pop(array_slice($a,-2,1));
return $c;
}
print_r(foo());
Второй беспокоит меня, так как у меня много «компактного» кода. Поэтому я либо отказываюсь от яркой идеи использования собственного обработчика ошибок (для улучшения моего модуля ведения журнала), либо расширяю весь свой код.
Кто-нибудь с лучшими идеями? Также WTF?
UPDATE
Благодаря ответам я кое-что узнал о том, как php обрабатывает ошибки. Неразбериха с E_ALL, за исключением E_STRICT (php 5), не очень крутая.
Помимо всего этого, создание собственного обработчика ошибок по умолчанию включает E_STRICT и именно здесь начинаются проблемы.
Мораль этой истории состоит в том, чтобы использовать собственный обработчик ошибок, чтобы перехватить их ВСЕ и использовать константы ошибок (E_STRICT, E_USER_WARNING, E_USER_ERROR и т. Д.) Для выполнения фильтрации.
Что касается «проблемы повреждения памяти» со ссылками на переменные и некоторыми функциями, что я могу сказать? Вдвойне не круто. Я (что не означает, что вы должны) игнорировать E_STRICT в моем обработчике ошибок, и жизнь продолжается.