Ответ
В PHP исключения представлены объектами. Базовым классом для всех исключений является встроенный класс Exception или, начиная с PHP 7, интерфейс Throwable, который он реализует.
Пример базовой обработки:
try {
if ($file === null) {
throw new InvalidArgumentException('Файл не указан.');
}
$content = file_get_contents($file);
} catch (InvalidArgumentException $e) {
// Ловим конкретный тип исключения
echo 'Ошибка аргумента: ' . $e->getMessage();
log_error($e->getFile(), $e->getLine());
} catch (Exception $e) {
// Ловим все остальные исключения
echo 'Произошла общая ошибка: ' . $e->getMessage();
}
Класс Exception предоставляет методы для отладки:
getMessage()— сообщение об ошибке.getCode()— числовой код ошибки.getFile(),getLine()— место возникновения.getTrace(),getTraceAsString()— стек вызовов.
Создание пользовательского исключения:
class ConfigurationException extends RuntimeException
{
protected $configKey;
public function __construct(string $key, string $message = '', int $code = 0, Throwable $previous = null)
{
$this->configKey = $key;
parent::__construct($message ?: "Ошибка в конфигурационном ключе: {$key}", $code, $previous);
}
public function getConfigKey(): string
{
return $this->configKey;
}
}
// Использование
throw new ConfigurationException('database.host');