Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим Exception відрізняється від Error і що ловить Throwable?

У PHP дві гілки «кидабельних» об'єктів, і обидві реалізують інтерфейс Throwable:

  • Exception - очікувані ситуації, які код програми кидає сам і може обробити: немає файлу, сервіс не відповів, дані не пройшли перевірку.
  • Error - помилки в самому коді чи середовищі, які кидає рушій: TypeError, ArgumentCountError, DivisionByZeroError, виклик методу на null.
try {
    $user->profile->avatar(); // $user->profile === null
} catch (Exception $e) {
    // сюди не потрапить: це Error
} catch (Error $e) {
    // Call to a member function avatar() on null
}

Що з цим робити:

  • Ловіть конкретні класи винятків, які очікуєте: catch (ConnectionException $e).
  • catch (Throwable $e) - лише на самому верху: в обробнику помилок фреймворку, у воркері черги, щоб записати збій і не впасти цілком.
  • Error зазвичай не «обробляють», а виправляють: це баг, і його треба побачити в логах, а не проковтнути.

До PHP 7 більшість таких помилок були фатальними й не ловилися взагалі - Error з'явився саме для того, щоб їх можна було перехопити.

Докладніше в документації: Помилки в PHP 7+

1

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання