Переводим ошибки php в Exception
Очень жаль что до сих пор в php не сделали нормальную поддержку Exception. Небольшой трюк описанный ниже позволяет на почти все ошибки php вызывать исключение, которое мы можем потом отловить и обработать, если необходимо.
PHP позволяет определять обработчик ошибок. Для этого нужно определить функцию с параметрами:
$errno– тип ошибки;$errmsg– сообщение об ошибке;$filename– имя файла, где произошла ошибка;$linenum– номер строки;$errcontext– контекст (как правило массив с переменными),
которая будет обрабатывать ошибку и зарегистрировать ее используя функцию set_error_handler.
Итак пишем функцию-обработчик. Все просто она должна вызывать исключение:
function PHP_errorHandler($errno, $errmsg, $filename, $linenum, $errcontext ) {
throw new ErrorException($errmsg, 0, $errno, $filename, $linenum);
}
?>
Теперь регистрируем функцию:
exit("Обработчик ошибок не зарегистрирован");
};
?>
Проверяем:
unlink("any-not-existed.file");
} catch (Exception $e) {
echo $e->getMessage();
}
try {
array_flip();
} catch (Exception $e) {
echo $e->getMessage();
}
К сожалению обработчик ошибок не ловит ошибки следующих типов: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, поэтому следующий код не вызовет исключения, а отобразится в браузер, как обычная ошибка.
xxx(); // Несуществующая функция
} catch (Exception $e) {
echo $e->getMessage();
}
При необходимости можем восстановить обработчик по умолчанию:


