НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ

PHP Підручник

PHP СТАРТ PHP Інтро PHP Встановлення PHP Синтаксис PHP Коментарі PHP Змінні PHP Echo / Print PHP Типи даних PHP Рядки PHP Числа PHP Математика PHP Константи PHP Оператори PHP If...Else...Elseif PHP Switch PHP Цикли PHP Функції PHP Масиви PHP Суперглобали PHP RegEx

PHP Форми

PHP Обробка форми PHP Перевірка форми PHP Обов'язкові поля форми PHP Форма URL/E-mail PHP Заповнення форми

PHP Розширений

PHP Дата і час PHP Підключення файлів PHP Обробка файлів PHP Файл відкрити/читати PHP Файл створити/записати PHP Файл Завантажити PHP Кукі PHP Сесії PHP Фільтри PHP Розширені фільтри PHP Callback функції PHP JSON PHP Винятки

PHP ООП

PHP Що таке ООП PHP класи/об'єкти PHP Конструктор PHP Деструктор PHP Модифікатори доступу PHP Спадкування PHP Константи PHP Абстрактні класи PHP Інтерфейси PHP Трейти PHP Статичні методи PHP Статичні властивості PHP Простори імен PHP Ітерабелі

MySQL База даних

MySQL База даних MySQL Підключення MySQL Створити БД MySQL Створити таблиці MySQL Вставити дані MySQL Отримати останній ID MySQL Вставити кілька записів MySQL Підготовлені інструкції MySQL Вибрати дані MySQL Where MySQL Order By MySQL Видалення даних MySQL Оновлення даних MySQL Обмеження даних

PHP XML

PHP XML Парсери PHP SimpleXML Парсер PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Інтро AJAX PHP AJAX База даних AJAX XML AJAX Живий пошук AJAX Опитування

PHP Приклади

PHP Приклади PHP Компілятор PHP Вікторина PHP Вправи PHP Сертифікат

PHP Довідник

PHP Огляд PHP Масив PHP Календар PHP Дата PHP Каталог PHP Помилка PHP Виняток PHP Файлова система PHP Фільтр PHP FTP PHP JSON PHP Ключові слова PHP Libxml PHP Пошта PHP Математика PHP Різне PHP MySQLi PHP Мережа PHP Output Control PHP RegEx PHP SimpleXML PHP Потік PHP Рядок PHP Обробка змінних PHP XML Парсер PHP Zip PHP Часові пояси

PHP. W3Schools українською. Уроки для початківців

En

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 українською.

Довідник містить описи та приклади всіх методів винятків.