PHP - Исключения
Интерфейс Throwable
В PHP исключения являются объектами, представляющими exceptional условия. Они бросаются, когда в вашем коде occurs конкретная ошибка. PHP предоставляет интерфейс Throwable
, который является базовым классом для всех исключений и ошибок. У него есть несколько методов, которые позволяют вам эффективно обрабатывать исключения.
Основы обработки исключений
Чтобы обработать исключения в PHP, вы можете использовать блок try-catch
. Вот пример:
<?php
try {
// Код, который может бросить исключение
throw new Exception("Произошла ошибка!");
} catch (Exception $e) {
// Код для обработки исключения
echo "Перехвачено исключение: " . $e->getMessage();
}
?>
В этом примере мы используем оператор throw
, чтобы создать новый объект Exception
с пользовательским сообщением. Если исключение брошено внутри блока try
, выполнение кода перейдет к соответствующему блоку catch
, где исключение перехватывается и обрабатывается.
set_exception_handler
Функция set_exception_handler
позволяет вам определить пользовательскую функцию, которая будет вызвана каждый раз, когда происходит не перехваченное исключение. Эта функция должна принимать два параметра: объект исключения и булево значение, указывающее, было ли исключение брошено во время вызова eval()
.
Вот пример использования set_exception_handler
:
<?php
function myExceptionHandler($exception) {
echo "Не перехваченное исключение: " . $exception->getMessage();
}
set_exception_handler('myExceptionHandler');
// Код, который бросает исключение
throw new Exception("Ой! Произошла ошибка.");
?>
В этом примере мы определяем пользовательскую функцию обработки исключений под названием myExceptionHandler
. Затем мы используем set_exception_handler
, чтобы установить эту функцию в качестве стандартного обработчика исключений. Когда occurs не перехваченное исключение, наша пользовательская функция будет вызвана вместо стандартной.
Исключения SPL
PHP предоставляет несколько встроенных классов исключений в Стандартной библиотеке PHP (SPL). Эти классы наследуют класс Exception
и предоставляют более конкретную информацию о различных типах исключений. Некоторые из распространенных исключений SPL включают:
-
BadFunctionCallException
: Бросается, когда callback refers к неопределенной функции или если отсутствуют некоторые аргументы. -
DomainException
: Используется для ошибок в логике домена вашего приложения. -
InvalidArgumentException
: Вызывается, когда функция получает аргумент, который она не принимает. -
LengthException
: Используется, когда операция пытается использовать объект неправильной длины. -
OutOfBoundsException
: Бросается, когда индекс массива выходит за пределы. -
OutOfRangeException
: Вызывается, когда значение не находится в ожидаемом диапазоне. -
RangeException
: Используется, когда значение не находится в specified диапазоне. -
RuntimeException
: Общий例外 для runtime ошибок. -
UnderflowException
: Бросается при возникновении недоflows (например, вычитание из пустого стека). -
UnexpectedValueException
: Вызывается, когда значение не соответствует expected типу.
Вы можете использовать эти исключения SPL в вашем коде, как и любые другие классы исключений. Например:
<?php
function divide($a, $b) {
if ($b == 0) {
throw new DivisionByZeroError("Деление на ноль не допускается.");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (DivisionByZeroError $e) {
echo "Перехвачено исключение: " . $e->getMessage();
}
?>
Пользовательские исключения
Кроме использования встроенных исключений SPL, вы можете также создавать свои собственные пользовательские классы исключений. Для этого просто расширите класс Exception
и добавьте любую дополнительную функциональность, которая вам нужна. Вот пример:
<?php
class MyCustomException extends Exception {
public function __construct($message, $code = 0, Exception $previous = null) {
parent::__construct($message, $code, $previous);
}
}
try {
throw new MyCustomException("Это пользовательское исключение.");
} catch (MyCustomException $e) {
echo "Перехвачено пользовательское исключение: " . $e->getMessage();
}
?>
В этом примере мы создаем новый класс под названием MyCustomException
, который наследует класс Exception
. Затем мы бросаем и перехватываем экземпляр этого пользовательского исключения, как и любое другое исключение.
Следуя этим рекомендациям и используя предоставленные инструменты, вы можете эффективно обрабатывать исключения в вашем коде на PHP и обеспечить, чтобы ваши приложения были устойчивыми и resilient против непредвиденных ошибок. Помните всегда тщательно тестировать ваш код и обрабатывать исключения优雅но, чтобы предоставить лучший опыт пользователя.
Credits: Image by storyset