PHP Винятки
Що таке винятки?
Винятком є об’єкт, який описує помилку або неочікувану поведінку PHP скрипту.
Багато функцій і класів PHP створюють винятки.
Визначені користувачем функції та класи також можуть створювати винятки.
Винятки — це хороший спосіб зупинити функцію, коли вона натрапляє на дані, які не може використовувати.
Створення винятку
Інструкція throw
дозволяє визначеній користувачем функції чи методу створювати виняток. Коли виникає виняток, наступний за ним код не буде виконано.
Якщо виняток не буде перехоплено, станеться фатальна помилка з повідомленням "Uncaught Exception" ("Неперехоплене виключення").
Давайте спробуємо створити виняток, не перехоплюючи його:
Приклад
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
Спробуйте самі »
Результат буде виглядати приблизно так:
Fatal error: Uncaught Exception: Division by zero in C:\webfolder\test.html:4
Stack trace: #0 C:\webfolder\test.html(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.html on line 4
Інструкція try...catch
Щоб уникнути помилки з наведеного вище прикладу, ми можемо використати інструкцію try...catch
для перехоплення винятків і продовження процесу.
Синтаксис
try {
код, який може створювати винятки
} catch(Exception $e) {
код, який запускається, коли виявляється виняток
}
Приклад
Показувати повідомлення, коли виникає виняток:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide.";
}
?>
Спробуйте самі »
Блок catch вказує, який тип винятку слід перехопити, і ім’я змінної, яка може бути використана для доступу до винятку. У наведеному вище прикладі тип винятку – Exception
, а ім’я змінної – $e
.
Інструкція try...catch...finally
Інструкцію try...catch...finally
можна використовувати для перехоплення винятків. Код у блоці finally
завжди виконуватиметься незалежно від того, чи була перехоплена виняткова ситуація. Якщо присутній finally
, блок catch
необов’язковий.
Синтаксис
try {
код, який може створювати винятки
} catch(Exception $e) {
код, який запускається, коли виявляється виняток
} finally {
код, який завжди виконується незалежно від того, чи було перехоплено виняток
}
Приклад
Показувати повідомлення, коли виникає виняток, а потім вказувати, що процес завершено:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "Unable to divide. ";
} finally {
echo "Process complete.";
}
?>
Спробуйте самі »
Приклад
Вивести рядок, навіть якщо виняток не було перехоплено:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo
"Process complete.";
}
?>
Спробуйте самі »
Об’єкт Exception (Виняток)
Об’єкт Exception містить інформацію про помилку або неочікувану поведінку, з якою зіткнулася функція.
Синтаксис
new Exception(message, code, previous)
Значення параметрів
Параметр | Опис |
---|---|
message | Не обов’язково. Рядок, що описує причину виключення |
code | Не обов’язково. Ціле число, за допомогою якого можна легко відрізнити цей виняток від інших того самого типу |
previous | Не обов’язково. Якщо цей виняток було створено в блоці catch іншого винятку, рекомендується передати цей виняток у цей параметр |
Методи
Під час перехоплення виняткової ситуації в наведеній нижче таблиці показано деякі методи, які можна використовувати для отримання інформації про виняткову ситуацію:
Метод | Опис |
---|---|
getMessage() | Повертає рядок, що описує причину виключення |
getPrevious() | Якщо цей виняток був викликаний іншим, цей метод повертає попередній виняток. Якщо ні, то повертається null |
getCode() | Повертає код винятку |
getFile() | Повертає повний шлях до файлу, у якому було створено виняток |
getLine() | Повертає номер рядка коду, який викликав виняток |
Приклад
Вивести інформацію про виняткову ситуацію, яка була створена:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero", 1);
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "Exception thrown in $file on line $line: [Code $code]
$message";
}
?>
Спробуйте самі »
Повний довідник про PHP винятки
Щоб отримати повну довідку, перейдіть до Повний довідник про PHP винятки на нашому сайті W3Schools українською.
Довідник містить описи та приклади всіх методів винятків.