Что такое исключения в PHP?
Исключение — это нежелательное или неожиданное событие, которое происходит во время выполнения PHP-скрипта.
Исключения генерируются многими функциями и классами PHP
(если возникает неожиданная ситуация, например, недопустимые данные).
Когда исключение генерируется, оно может быть перехвачено блоком кода (обычно блоком try...catch)
с соответствующей обработкой ошибок. Если исключение не перехвачено, оно будет обработано
стандартным обработчиком исключений, что часто приводит к фатальной ошибке и завершению скрипта.
В PHP используются следующие ключевые слова для обработки исключений:
throw- Это ключевое слово используется для генерации исключений.try- Это ключевое слово используется для создания оператораtry...catchилиtry...catch...finally.catch- Это ключевое слово используется для обработки исключений, которые генерируются кодом в предшествующем блокеtry.finally- Это ключевое слово используется в конструкцияхtry...finallyиtry...catch...finallyдля выполнения блока кода независимо от того, возникло ли исключение.
Ключевое слово PHP throw
Ключевое слово throw
используется для генерации исключения.
Если исключение НЕ перехвачено, возникнет фатальная ошибка с сообщением "Uncaught Exception", и скрипт будет завершен.
Здесь мы генерируем исключение без его перехвата:
Пример
<?php
function divide($x, $y) {
if($y == 0) {
throw new Exception("Невозможно делить на ноль.");
}
return $x
/ $y;
}
echo
divide(5, 0); // код, который может сгенерировать исключение
echo 'Hello';
?>
Попробуйте сами »
Результат будет выглядеть примерно так:
Фатальная ошибка: Uncaught Exception: Division by zero in
C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
Ключевое слово PHP try...catch
Здесь мы используем ключевое слово
try...catch, чтобы перехватить исключение/ошибку
из приведенного выше примера и продолжить выполнение скрипта.
Синтаксис
try {
код, который может сгенерировать исключение
} catch(Exception $e) {
код для выполнения при перехвате исключения
}Пример
Отобразить сообщение при генерации исключения и продолжить выполнение скрипта:
<?php
function divide($x, $y) {
if($y == 0) {
throw new Exception("Невозможно делить на ноль.");
}
return $x
/ $y;
}
try {
echo divide(5, 0); // может сгенерировать исключение
} catch(Exception $e) {
echo 'Ошибка: ' .
$e->getMessage();
}
echo '<br>Hello';
?>
Попробуйте сами »
Блок catch указывает, какой тип исключения должен быть перехвачен, и имя переменной,
которая может использоваться для доступа к исключению. В приведенном выше примере тип
исключения — Exception, а имя переменной — $e.
Ключевое слово PHP try...catch...finally
Ключевое слово try...catch...finally может использоваться для перехвата исключений.
Код в блоке
finally будет выполняться независимо от того,
было ли перехвачено исключение.
Синтаксис
try {
код, который может сгенерировать исключение
} catch(Exception $e) {
код для выполнения при перехвате исключения
} finally {
код, который всегда выполняется независимо от исключения
}Пример
Отобразить сообщение при генерации исключения, а затем указать, что процесс завершен:
<?php
function divide($x, $y) {
if($y == 0) {
throw new Exception("Невозможно делить на ноль.");
}
return $x
/ $y;
}
try {
echo divide(5, 0); // может сгенерировать исключение
} catch(Exception $e) {
echo 'Ошибка: ' . $e->getMessage();
}
finally {
echo '<br>Процесс завершен.';
}
?>
Попробуйте сами »
Объект Exception в PHP
Объект Exception содержит информацию о неожиданном поведении, с которым столкнулась функция.
Синтаксис
new Exception(message, code, previous)
Значения параметров
| Параметр | Описание |
|---|---|
| message | Необязательный. Строка с описанием причины генерации исключения |
| code | Необязательный. Целое число, которое может использоваться для легкого отличия этого исключения от других того же типа |
| previous | Необязательный. Если это исключение было сгенерировано в блоке catch другого исключения, рекомендуется передать это исключение в данный параметр |
Методы
При перехвате исключения следующая таблица показывает некоторые методы, которые можно использовать для получения информации об исключении:
| Метод | Описание |
|---|---|
| getMessage() | Возвращает строку с описанием причины генерации исключения |
| getPrevious() | Если исключение было вызвано другим, этот метод возвращает предыдущее исключение |
| getCode() | Возвращает целое число, которое может использоваться для идентификации исключения |
| getFile() | Возвращает абсолютный путь к файлу, где произошло исключение |
| getLine() | Возвращает номер строки кода, который сгенерировал исключение |
В следующем примере используются несколько методов Exception для получения дополнительной информации об исключении, которое было сгенерировано:
Пример
Вывести дополнительную информацию об исключении, которое было сгенерировано:
<?php
function divide($x, $y) {
if($y == 0) {
throw new Exception("Невозможно делить на ноль.");
}
return $x
/ $y;
}
try {
echo divide(5, 0);
} catch(Exception $e)
{
$file = $e->getFile();
$line = $e->getLine();
$code = $e->getCode();
$message = $e->getMessage();
echo
"Исключение сгенерировано в $file на строке $line: [Код $code] $message";
}
?>
Попробуйте сами »
Полный справочник по исключениям
Полный справочник можно найти на странице Полный справочник по исключениям PHP.
Справочник содержит описания и примеры всех методов Exception.