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

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

1

Для примера возьмём класс для загрузки файлов «Upload». Если возникнет ошибка, то сгенерируется исключение throw new Exception, далее код выполнятся не будет.

<?php
class Upload
{
	public $file = [];

	public function __construct($key)
	{
		if (empty($_FILES[$key])) {
			throw new Exception('Файл не был загружен');
		}
	  
		$this->file = $_FILES[$key];
		
		if (!empty($this->file['error']) || empty($this->file['tmp_name']) || $this->file['tmp_name'] == 'none') {
			throw new Exception('Не удалось загрузить файл');
		}
		
		if (empty($this->file['name']) || !is_uploaded_file($this->file['tmp_name'])) {
			throw new Exception('Не удалось загрузить файл');
		}
	}
	
	public function save($src)
	{
		if (!move_uploaded_file($this->file['tmp_name'], $src)) {
			throw new Exception('Не удалось загрузить файл');
		}
	}
}
PHP

Далее, при использовании класса используется конструкция try catch.

try {	
	$upload = new Upload('file');
	$upload->save(__DIR__ . '/файл.jpg');
	
	// ...
} catch (Exception $e) {
	echo $e->getMessage();
}
PHP

В блоке try выполняется методы класса, если будет ошибка, то она выведется в блоке catch.

2

Исключения возможно использовать и в обычных функциях:

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

Нахождение ошибки:

try {	
	open_file(__DIR__ . '/файл.jpg');
} catch (Exception $e) {
	echo $e->getMessage();
}
PHP
21.09.2020, обновлено 22.03.2024
7800
Предыдущая запись Мета-тег viewport
Следующая запись Поле для ввода PIN-кода

Комментарии

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

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

Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28477
+8
Список MIME типов
Ниже приведён список MIME-заголовков и расширений файлов.
24995
+7
PHP-класс обертка для PDO
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.
23017
+11
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
220016
+21
Работа с FTP в PHP
Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.
18480
+2
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55976
+20