Php виключення

Створення класу - це завжди робота на абстрактному рівні: створюється не конкретна область пам'яті, а тільки поведінку об'єктів. Клас виступає інструментом, який, як і мова програмування, може застосовуватися в абсолютно різних областях і додатках.

Обробка позаштатних ситуацій, помилок як в коді, так і помилок введення даних може бути різною для різних додатків: десь достатньо вивести повідомлення за допомогою функції echo, а десь повідомлення слід оформити у вигляді НТМ - сторінки з дизайном, узгодженим з іншими сторінками додатка; десь повідомлення про помилку повинне існувати в журнал (В файл або в базу даних).

Передбачити заздалегідь формат помилки неможливо, а його зумовленість буде звужувати сферу застосування класу і можливість його повторного використання. Виходом із ситуації є поділ коду класу й коду обробки помилок, цього можна досягти це нам і дозволить зробити механізм винятків.

Розробник класу повинен згенерувати виключення, а користувач класу може його обробити на свій розсуд. Розробники можуть проектувати свої власні виключення, які є класами, при цьому генерація винятків зводиться до передачі об'єкта виключення з точки виникнення нештатної ситуації в обробник виключень.

Зручність застосування виняткових ситуацій стосовно об'єктно - орієнтованого підходу зовсім не означає, що слід нехтувати процедурними засобами обробки помилок. У РНР є розвинена система відстеження і контролю за помилками, і нехтувати нею не варто. Для реалізації механізму виключень в РНР введені наступні ключові слова: try (контролювати), throw (генерувати) і catch (обробляти).

зауваження:
Ви можете використовувати механізм винятків навіть якщо ви програмуєте в структурному стилі, а не в стилі ООП. Ключове слово try дозволяє виділити в будь-якому місці скрипта так званий контрольований блок, за яким слід один або кілька блоків обробки винятків, що реалізуються за допомогою ключового слова catch:

Php виключення

Майте на увазі: Якщо винятку не породжується, то блок catch не буде виконано ніколи.

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

При генерації виключення ключове слово throw приймає об'єкт класу Exception або похідного класу.

клас Exception

Для ефективного використання класу Exception слід познайомитися з його інтерфейсом. Нижче подано властивості класу Exception, оголошені з специфікатором доступу protected, доступ до яких можна отримати за допомогою методів класу, а також з похідних класів.

Клас Exception відноситься до так званих визначеним класам, тобто класами, які реалізовані в РНР - інтерпретатор і не вимагають реалізації з боку програміста.

Захищені властивості класу Exception:

  • $ This-> message - Текстове повідомлення, яке описує виняткову ситуацію.
  • $ This-> code - Числовий код. призначений даного типу виняткових ситуацій.
  • $ This-> file - Файл, в якому сталася виняткова ситуація.

Методи класу Exception

Так як властивості класу Exception, оголошені з специфікатором protected, доступ до них здійснюється за допомогою методів класу, опис яких наведено нижче:

public function __construct ($ message = NULL, $ code = 0) Конструктор класу, не започатковано властивості $ message і $ code - обидва не обов'язкові. final function getMessage () Метод повертає текстове повідомлення, що міститься у властивості $ this-> message final function getCode () Метод, який повертає числовий код винятку, що зберігається у властивості $ this-> code final function getFile () Метод повертає ім'я файлу $ this- > file в якому відбулося виключення. final function getLine () Метод повертає номер рядка $ this-> line в якій відбулося виключення. final function getTrace () Метод повертає стек обробки виняткової ситуації в вигляді масиву. final function getTraceAsString () Метод повертає стек обробки виняткової ситуації у вигляді рядка. function __toString () Перевантаження магічного методу __toString () повертає рядок, коли відбувається спроба використовувати об'єкт в строковому контексті.

Нижче представлений код який видасть докладну інформацію про те, що сталося виключення:

Залежно від того яке значення прийме $ b Скіпт виведе інформацію для першого оператора throw:

Виняток 0. Перша точка входу
в файлі D: \ main \ oop \ 08 \ index.php
в рядку 8

або для другого:

Виняток 1. Друга точка входу
в файлі D: \ main \ oop \ 08 \ index.php
в рядку 14

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

До речі:
Якщо виключення не ловитися жодним блоком catch, то в підсумку PHP видасть фатальну помилку і зупинить скрипт, що б цього уникнути потрібно, призначити Винятки як обробник помилок:

Схожі статті