Error и Exception в PHP 7+
Вопрос
Чем Error отличается от Exception в PHP и зачем это разделение?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Оба реализуют Throwable
Error: ошибки движка и программиста (TypeError, DivisionByZeroError, вызов у null)
Exception: исключительные ситуации приложения, которые можно обработать
catch (Exception) не ловит Error, это сделано для обратной совместимости
catch (Throwable) только на верхнем уровне
Что могут спросить следом
- Какие исключения бросает match без подходящей ветки?
- Что такое ValueError?
Разбор
До PHP 7 фатальные ошибки просто убивали скрипт. В PHP 7 их сделали исключениями, но чтобы старый код с catch (Exception $e) не начал внезапно ловить ошибки программиста, ввели отдельную иерархию Error. Оба типа реализуют интерфейс Throwable.
Error сигнализирует о баге: TypeError при неверном типе аргумента, DivisionByZeroError, UnhandledMatchError от match без подходящей ветки, ValueError, когда аргумент правильного типа, но недопустимого значения, вызов метода у null. Обычно их не ловят, а исправляют код.
Exception это ситуации, которые приложение может ожидать и обработать: нет файла, отказал платёж, битый JSON. Свои исключения наследую от Exception или SPL-классов вроде RuntimeException. catch (Throwable) пишу только на самом верху, в глобальном обработчике, чтобы залогировать что угодно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.