Вступить в клуб →
сложнаявопросLegacy-код, SOLID и статический анализ

Наследник класса доставки бросает исключение там, где базовый класс работал

class Shipping
{
    public function trackingUrl(string $trackNumber): string { ... }
}

class PickupShipping extends Shipping
{
    public function trackingUrl(string $trackNumber): string
    {
        throw new LogicException('Самовывоз не отслеживается');
    }
}

Страница заказа, работающая с любым Shipping, падает для самовывоза. Какой принцип нарушен и как исправить?

  • Подстановки Лисков: разделить контракт на отслеживаемые и нет
  • Единственной ответственности: вынести исключение в сервис
  • Открытости/закрытости: добавить в базовый класс проверку типа
  • Никакой: код страницы должен ловить LogicException

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела