Выявление ошибок в представленном коде

Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.

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

Что ответить на собеседовании

Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.

Подробный разбор

Ответ с пояснениями

Условие

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

class DbLogger
{
    public function logError(string $message)
    {
        // ..
    }
}

class EmailSender
{
    private DbLogger $dbLogger;

    public function __construct(DbLogger $dbLogger)
    {
        $this->dbLogger = $dbLogger;
    }

    public function sendEmail(): void
    {
        try {
            // ...
        } catch (SomeException $exception) {
            $this->dbLogger->logError($exception->getMessage());
        }
    }
}

Ответ

Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.

Можно зависеть от интерфейса логгера, чтобы менять реализацию и тестировать отправитель. После записи ошибки либо пробросьте исключение, либо верните явно типизированный результат согласно контракту. Продумайте отказ самого логгера, повторную отправку и идемпотентность. Не записывайте в журнал чувствительные данные письма; не нужно расширять catch до всех ошибок без определённой стратегии обработки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее