Исключения PHP (Try и Catch)

Как и в других языках, PHP имеет механизм исключений для обработки пользовательских ошибок. Исключение генерируется оператором throw new Exception(), а ловится операторами try и catch.

Пример – обернем конструкцией try-catch создание экземпляра класса «Images» и вызов метода «open»:

try {	
	$image = new Images();
	$image->open(__DIR__ . '/файл.jpg');
} catch (Exception $e) {
	var_dump($e);
}
PHP

Код класса Images:

Class Images
{
	public function open($filename)
	{
		if (empty($filename) || !is_file($filename)) {
			/* Выброс исключения */
			throw new Exception('Файл не найден');
		} else {
			/* Ошибки нет, продолжение работы класса... */
		}
	}
}
PHP

Тут в методе «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 {
		/* Ошибки нет, продолжение работы функции... */
	}
}
PHP

Ловля ошибки:

try {	
	open_file(__DIR__ . '/файл.jpg');
} catch (Exception $e) {
	var_dump($e);
}
PHP

Сгенерированное исключение:

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
}
21.09.2020
Предыдущая запись Мета-тег viewport
Следующая запись Поле для ввода PIN-кода

Комментарии

, чтобы добавить комментарий.

Другие публикации

Ниже приведён список MIME-заголовков и расширений файлов.
1964
+1
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
7790
+5
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
7047
+3
Для поиска файлов на сервере хорошо подходит функция glob(), которая возвращает список файлов по заданной маске, например...
2276
0
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.
9633
+4
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
25846
+9