Выбор ответа Middle Исключения и ошибки обновлено

Цепочка исключений

Вопрос

Репозиторий ловит PDOException и бросает своё OrderNotSavedException. Как не потерять исходную причину?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Передать $e третьим аргументом конструктора как $previous. Третий параметр конструктора Exception это $previous.

Варианты ответа

  1. Записать $e->getMessage() в сообщение нового исключения
  2. Передать $e третьим аргументом конструктора как $previousправильный ответ
  3. Бросить $e повторно сразу после броска нового исключения
  4. Вызвать exit($e), чтобы исходная ошибка попала в лог сервера

Разбор

Третий параметр конструктора Exception это $previous. Логгеры и обработчики фреймворков показывают всю цепочку через getPrevious(), включая стек исходной ошибки. Сообщение без стека теряет контекст. Код после throw не выполнится.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.