Как и в других языках, PHP имеет механизм исключений для обработки пользовательских ошибок. Исключение генерируется оператором throw new Exception()
, а ловится операторами try
и catch
.
Для примера возьмём класс для загрузки файлов «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('Не удалось загрузить файл');
}
}
}
Далее, при использовании класса используется конструкция try
catch
.
try {
$upload = new Upload('file');
$upload->save(__DIR__ . '/файл.jpg');
// ...
} catch (Exception $e) {
echo $e->getMessage();
}
В блоке try выполняется методы класса, если будет ошибка, то она выведется в блоке catch.
Исключения возможно использовать и в обычных функциях:
function open_file($filename)
{
if (empty($filename) || !is_file($filename)) {
/* Выброс исключения */
throw new Exception('Файл не найден');
}
/* Ошибки нет, продолжение работы функции... */
}