Как и в других языках, PHP имеет механизм исключений для обработки пользовательских ошибок. Исключение генерируется оператором throw new Exception()
, а ловится операторами try
и catch
.
Пример – обернем конструкцией try-catch создание экземпляра класса «Images» и вызов метода «open»:
try {
$image = new Images();
$image->open(__DIR__ . '/файл.jpg');
} catch (Exception $e) {
var_dump($e);
}
Код класса Images:
Class Images
{
public function open($filename)
{
if (empty($filename) || !is_file($filename)) {
/* Выброс исключения */
throw new Exception('Файл не найден');
} else {
/* Ошибки нет, продолжение работы класса... */
}
}
}
Тут в методе «open» идет проверка, существует запрошенный файл или нет, в случаи ошибки выбрасывается исключение, которое ловится при вызове метода, вся информация о пойманной ошибке будет доступна в переменной $e
:
object(Exception)#2 (7) {
["message":protected] => string(26) "Файл не найден"
["string":"Exception":private] => string(0) ""
["code":protected] => int(0)
["file":protected] => string(54) "/public_html/index.php"
["line":protected] => int(22)
["trace":"Exception":private] => array(1) {
[0] => array(6) {
["file"] => string(54) "/public_html/index.php"
["line"] => int(31)
["function"] => string(4) "open"
["class"] => string(6) "Images"
["type"] => string(2) "->"
["args"] => array(1) {
[0] => string(56) "/public_html/файл.jpg"
}
}
}
["previous":"Exception":private] => NULL
}
Исключения возможно использовать и в обычных функциях:
function open_file($filename)
{
if (empty($filename) || !is_file($filename)) {
/* Выброс исключения */
throw new Exception('Файл не найден');
} else {
/* Ошибки нет, продолжение работы функции... */
}
}
Ловля ошибки:
Сгенерированное исключение:
object(Exception)#1 (7) {
["message":protected]=>string(26) "Файл не найден"
["string":"Exception":private]=>string(0) ""
["code":protected]=>int(0)
["file":protected]=>string(54) "/public_html/index.php"
["line":protected]=>int(20)
["trace":"Exception":private]=>array(1) {
[0]=>array(4) {
["file"]=>string(54) "/public_html/index.php"
["line"]=>int(27)
["function"]=>string(9) "open_file"
["args"]=>array(1) {
[0]=>string(56) "/public_html/файл.jpg"
}
}
}
["previous":"Exception":private]=>NULL
}