Винятки в php

Винятки в php

Під винятковою ситуацією розуміють таку ситуацію що виникли в ході виконання коду, коли неясно, що робити далі або подальше виконання коду безглуздо. Наприклад, скрипту не вдалося встановити з'єднання з базою даних, тоді додавання або вибірка даних з неї свідомо безглузда. В php в подібних ситуаціях часто нативная функція просто повертає false і виконання явно непрацюючого коду триває. Щоб уникнути подібної ситуації можна перевіряти значення повертається функцією і, в разі якщо воно говорить про виникнення помилки, виводить попередження. Такий підхід має деякі недоліки. По-перше, для зміни дій виконуваних при помилку користувачеві вашого коду доведеться редагувати ваш код. Набагато краще було б дозволити йому самому визначати механізм обробки цієї помилки. По-друге, повернений функцією значення не завжди може бути правильно розцінений, або зовсім залишитися непроверяемим, тоді в разі помилки доведеться витрачати час на з'ясування її причин. По-третє, не завжди вірно прагнути обробити будь-яку проблему прямо в методі або в функції, адже в такому випадку валідація параметрів і обробка помилок може захарастила спочатку досить простий код. Набагато краще якимось чином повідомити користувачеві вашого коду, що щось пішло не так, дозволивши йому самому вирішувати, що робити в такому випадку.

Для вирішення всіх цих проблем і був придуманий механізм обробки виключень.

винятки

Виняток - це об'єкт, який є екземпляром вбудованого класу Exception. Цей об'єкт створюється для зберігання інформації про виникнення помилки і для виведення повідомлень про неї.

Конструктор класу Exception може приймати два необов'язкові параметри: рядок, що містять повідомлення про помилку і її код. Клас Exception так само містить методи, які допомагають встановити причину виниклої помилки.

  • getMessage - повертає рядок, яка була передана конструктору і містить повідомлення про помилку.
  • getCode - повертає код помилки (тип int), який був переданий конструктору.
  • getFile - повертає ім'я файлу в якому було згенеровано виняток.
  • getLine - повертає номер рядка в якій було згенеровано виняток.
  • getTrace - повертає багатовимірний масив, що містить послідовність методів, виклик яких привів до генерування винятку. Так само містить параметри, які були передані цим методам і номера рядків, де здійснювалися виклики.
  • getTraceAsStrin g - повертає строкову версію даних, які повертає метод getTrace.
  • __toString - магічний метод, який викликається, коли екземпляр класу Exception наводиться до рядка.

генерація винятків

Для генерації виключення використовується ключове слово throw і екземпляр класу Exception. який дуже часто створюється прямо після інструкції throw. З англійської throw перекладається як «кидати», що дуже точно описує поведінку цього оператора, який може генерувати (кидати) виключення, надаючи коду, який викликав метод, в якому розташований цей оператор, самому обробляти виключення.

Давайте розглянемо клас для отримання деяких конфігураційних даних з ini-файлу.

Код цього класу сильно спрощений і в ньому не передбачена обробка помилок. Наприклад, при відсутності ini-файлу, неправильному його форматуванні або відсутності в файлі деяких даних, цей код не буде працювати коректно.

Файл з яким буде працювати цей клас може виглядати приблизно так:

userName = «true-coder»
password = «veryLongAndDifficult»
hostName = «localhost»

Для того щоб повідомити про виниклу помилку, що допоможе користувачеві класу Config адекватно на неї зреагувати і, можливо, запобігти виконанню некоректно працюючого коду, використовуємо механізм генерації виключень.

Внесемо деякі зміни в конструктор класу Config.

Схожі статті