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 включають бібліотеки та фреймворки, які приходять з власними системами обробки помилок, пропонуючи більше можливостей, як-от логування помилок у файли чи відображення сторінок помилок, зручних для користувача.

Дивіться також