Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: exceptions, php

Что такое кастомные исключения и зачем они нужны?

Этот вопрос проверяет понимание того, как создавать и использовать пользовательские классы исключений для структурированной обработки специфичных для предметной области ошибок.

Короткий ответ

Кастомные исключения — это пользовательские классы, которые наследуются от базового класса Exception (или его потомков). Они нужны для того, чтобы явно и понятно различать типы ошибок в приложении. Вместо того чтобы везду использовать общее Exception, вы создаете, например, PaymentFailedException или InsufficientFundsException. Это позволяет точнее перехватывать и обрабатывать конкретные ошибки, добавлять в них специфичную информацию и улучшает читаемость кода.

Длинный ответ

Использование кастомных исключений — это признак хорошо структурированного и продуманного приложения.

Зачем создавать кастомные исключения?

  1. Семантика и читаемость: Имя исключения само говорит о природе ошибки. throw new InsufficientFundsException() гораздо понятнее, чем throw new Exception('Not enough money').

  2. Точный перехват: Вы можете перехватывать не все исключения подряд, а только те, которые можете обработать.

    try {
        $user->makePayment($order);
    } catch (InsufficientFundsException $e) {
        // Предложить пользователю пополнить баланс
    } catch (PaymentGatewayTimeoutException $e) {
        // Повторить запрос к платежному шлюзу
    } catch (Exception $e) {
        // Общая обработка всех остальных ошибок
    }
  3. Дополнительный контекст: В кастомный класс исключения можно добавить методы и свойства для передачи дополнительной информации.

    throw new PaymentFailedException($paymentGateway, $responseCode);

Как создавать кастомные исключения

Просто создайте класс, наследуемый от Exception.

<?php

class InsufficientFundsException extends Exception
{
    protected $currentBalance;
    protected $requiredAmount;

    public function __construct($currentBalance, $requiredAmount, $message = "Insufficient funds", $code = 0, Throwable $previous = null)
    {
        $this->currentBalance = $currentBalance;
        $this->requiredAmount = $requiredAmount;
        $message = sprintf("%s. Current: %.2f, Required: %.2f", $message, $currentBalance, $requiredAmount);
        parent::__construct($message, $code, $previous);
    }

    public function getCurrentBalance()
    {
        return $this->currentBalance;
    }
}

// Использование
if ($user->balance < $order->total) {
    throw new InsufficientFundsException($user->balance, $order->total);
}

Вывод:
Создавайте кастомные исключения для ошибок, специфичных для бизнес-логики вашего приложения. Это мощный инструмент для создания чистого, поддерживаемого и надежного кода, который точно и понятно сообщает о возникающих проблемах.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • PHP

    PHP

Ключевые слова

#exceptions

#php

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.