PHP:
Обработка ошибок

Как:

В PHP вы можете управлять ошибками с помощью блоков try-catch, и вы можете настроить процесс с помощью пользовательских обработчиков ошибок и исключений.

// Простой пример с try-catch
try {
  // Действие с риском
  $file = fopen("nonexistentfile.txt", "r");
} catch (Exception $e) {
  // Обработка ошибки
  echo "Ошибка: " . $e->getMessage();
}

// Установка пользовательского обработчика ошибок
set_error_handler(function($severity, $message, $file, $line) {
  throw new ErrorException($message, 0, $severity, $file, $line);
});

// Использование исключений
class MyException extends Exception {}

try {
  // Действие и генерирование пользовательского исключения
  throw new MyException("Пользовательская ошибка!");
} catch (MyException $e) {
  // Обработка пользовательского исключения
  echo $e->getMessage();
}

// Пример вывода:
// Ошибка: fopen(nonexistentfile.txt): не удалось открыть поток: Нет такого файла или каталога
// Пользовательская ошибка!

Углублённо

В прошлом ошибки в PHP были скорее предупреждениями и уведомлениями, которые не останавливали выполнение скрипта. По мере созревания языка была принята более надёжная объектно-ориентированная обработка ошибок через класс Exception, введённый в PHP 5. Позже, с выходом PHP 7, появились классы Error, которые наконец различали ошибки и исключения.

До появления блоков try-catch PHP использовал set_error_handler() для обработки ошибок. try-catch более чистый и современный. Но пользовательские обработчики ошибок всё ещё имеют место быть, особенно для устаревшего кода или когда вам нужно поймать то, что обычно является ошибками, не являющимися исключениями.

Интерфейс Throwable в PHP 7+ означает, что будь то Error или Exception, вы можете поймать оба. Это удобно, потому что теперь вы не пропускаете критические ошибки времени выполнения, которые раньше было сложнее отследить.

Альтернативы встроенным механизмам PHP включают библиотеки и фреймворки, которые предлагают свои системы обработки ошибок, предлагая больше функций, таких как логирование ошибок в файлы или отображение страниц с ошибками, дружественных к пользователю.

Смотрите также