Каким типом данных представлено исключение (Exception) в PHP?

«Каким типом данных представлено исключение (Exception) в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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');