Php-виключення try і catch, php

Представляємо вашій увазі керівництво для новачків про те, як використовувати блоки в PHP try catch. У цій статті я покажу, як перехоплювати виключення.

Давайте відразу поглянемо на приклад згенерованого виключення (і згодом перехопленого):

У наведеному вище прикладі я продемонстрував використання TRY і CATCH. в якому виняток завжди згенеровано (тільки заради прикладу):

  1. Усередині блоку TRY ми перевіряємо, чи дорівнює цифра 1 цифрі 2. Так як вона не дорівнює (і ніколи не буде дорівнювати), ми генеруємо виключення з повідомленням "1 цієї статті не дорівнює 2! ";
  2. Усередині блоку CATCH ми перехоплюємо виняток і виводимо відповідне повідомлення.
  • TRY. всередині блоку PHP try ми задаємо логіку програми. Цей блок містить код, який може або не може згенерувати виключення;
  • CATCH. блок CATCH буде перехоплювати будь-які винятки, що проявилися в попередньому блоці TRY. Код всередині блоку CATCH буде виконаний тільки в разі виявлення виключення;
  • FINALLY. якщо ви використовуєте PHP 5.5 і вище, то ви можете використовувати блок FINALLY. Розташований в ньому код виповнюється завжди, незалежно від того, чи було виявлено виняток.

Коли використовуються виключення?

Винятки використовуються, коли результат операції відрізняється від того, що чекало вашу програму. Наприклад, якщо ваше додаток намагається прочитати CSV-файл на сервері, а цього файлу не існує, то можна згенерувати виключення. Використання PHP try catch в прикладі:

У наведеному вище прикладі використання в PHP try exception ми генеруємо виняток тоді, коли не можемо відкрити запитуваний файл. І генеруємо ми його, так як файл повинен був існувати. Приклади ситуацій, коли ви можете генерувати виключення:

  1. Ваше PHP-додаток не може підключитися до MySQL;
  2. Помилка при запиті до бази даних;
  3. Помилка при запиті до API;
  4. Отримано некоректний тип запиту;
  5. Відсутні необхідні змінні $ _POST або $ _GET.

Чи потрібно перехоплювати всі виключення?

Особисто я так не вважаю. Наприклад: вам не вдається підключитися до бази даних, і генерується виняток, чи потрібно тоді виконувати весь код? Якщо весь наступний код прив'язаний до бази даних, якою просто не існує, то навіщо ж його виконувати?

На мою думку, виключення потрібно перехоплювати за допомогою PHP try catch finally тільки, якщо це не робить негативного впливу на інші функції програми.

Наприклад: якщо API-запит до зовнішнього сервісу видає помилку, то ви можете перехопити виняток і вивести дружнє користувачеві повідомлення «Неможливо підключитися до бази даних» або «Інформація про погоду недоступна».

Чи не перехоплені винятку слід обробляти за допомогою призначеного для користувача обробника. Так ви зможете обробляти не перехоплені винятку, і виводити зрозумілі людині повідомлення або заглушки.

Переклад статті "Php Exceptions: Try Catch "був підготовлений дружною командою проекту Сайтобудування від А до Я.