Задать вопрос

Как спроектировать обработку исключений?

Всем привет! Сейчас проектирую свой фреймворк. Раньше писал на yii2. Решил внедрить обработку исключений в ядро фреймворка. Прочитал эту https://habrahabr.ru/post/30399/ и еще несколько статей об обработке исключений. На практике начал писать классы исключений и бросать их в коде. Между тем при установке xdebug, уже можно увидеть красивый стек вызовов в табличке вместе с ошибкой, пути к файлу и строчки где возникла ошибка. Когда же я начинаю бросать кастомные исключения, то мало того, что мне необходимо писать писать блок catch для его обработки (а иначе выбрасывается еще и ошибка о не пойманном исключении - Uncaught exception), так еще и красивая табличка со стеком пропадает и ее приходится создавать самому (изобретая велосипед). Какой вывод сделал я: если бросаю где-то исключение (Exception или какое-то свое), то под него я обязан написать блок catch, и изобрести красивый вывод стека заново, соответственно если у меня будет 20 моих кастомных исключений, я должен буду написать 20 блоков catch (если моя цель - это вывод уникального сообщения об ошибки и стека функций, то это не рационально). Причем, если не бросать исключение, то ошибку мне все равно выдаст, в красивой рамочке. У меня сложилось такое впечатление, что обработка исключений выгодна лишь тогда, когда действительно необходимо написать какой-то обработчик (а не просто выводить сообщение об ошибке и стек). В чем же тогда выгода использования исключений во фреймворке, какие Ваши мысли?

Прошу не придераться к словам и указать на ошибки в моих рассуждениях, если они есть, спасибо.
  • Вопрос задан
  • 493 просмотра
Подписаться 4 Оценить 2 комментария
Решения вопроса 1
zTrue
@zTrue
Скорее всего, у Вас есть общая точка входа, оберните весь код вызова приложения в try-catch и ловите там \Exception. Все кастомные исключения должны наследоваться от него, чтобы попасть в этот блок.

<?php
// index.php
try {
  $app = new \Framework\App();
  $app->run();
} catch (\Exception $e) {
  // handle any unhandled exception here
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lega
Ловить конкретную ошибку имеет смысл если вы её ожидаете и знаете как её обработать. Иначе пусть она валится до самого верхнего catch, там логируется и шлет вам mail/сообщение в чат.
Далее вы уже решаете что с ней сделать - либо исправить ошибку, либо это будет ожидаемое исключение и вы для её добавите catch с обработчиком.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы