Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
* This source code was highlighted with Source Code Highlighter.
- class Application_Exception extends Exception {}
- class Validation_Exception extends Exception {}
- try {
- if ($validationError) {
- throw new Validation_Exception('Validation error');
- }
- if ($applicationError) {
- throw new Application_Exception('Application error');
- }
- }
- catch (Validation_Exception $e) {
- //Обрабатываем только ошибки валидации
- }
function my_error_handler($c, $m, $f, $l) {
throw new MyException($m, $c, $f, $l);
}
set_error_handler('my_error_handler', error_reporting());
* This source code was highlighted with Source Code Highlighter.
Хороший пример — это реакция на нехватку памяти. У самого Джоэла притчей во языцех стало то, что нерадивые программисты забывают проверять значение, возвращенное из malloc(). Ну хорошо, проверили мы, что malloc вернул "памяти нет". Что делать? Только отказываться от дальнейшей работы этой функции, что тут другое придумать? Вот исключения и делают это автоматически и надежно, не полагаясь на то, что каждая из цепочки в 50 вызывающих функций не забудет передать наверх каждую ошибку, возникшую в самой глубине менеджера памяти.
Нет смысла заворачивать fatal errors в исключения. Вы хотите отлавливать их в try .. catch и красиво завершать? Красиво завершать и так получится если юзать set_error_handler.
Использование исключений для штатных ситуаций (емэйл невалиден) лишь плодит try .. catch блоки, а следить за ними (если их много) ненамного легче чем за глобальными переменными (если их много)
А помимо неудобства это, хотя выглядит оопэшно, но нарушает инкапсуляцию: код который использует третью библиотеку будет должен знать имена эксепшнов этой библиотеки.
Обработка ошибок и исключений в PHP