> Что такое принцип подстановки Лисков из SOLID? (PHP)
Уровень: junior · Язык: PHP · Категория: Технические вопросы
Компании: Travelata
> Пример ответа
Принцип подстановки Лисков (Liskov Substitution Principle, LSP) гласит: объекты в программе должны быть заменяемы экземплярами их подтипов без изменения корректности программы. Проще говоря, если у вас есть класс-родитель, то его наследники должны полностью соответствовать контракту родителя, не нарушая ожидаемого поведения.
В PHP это означает, что при наследовании нельзя:
- Сужать предусловия (например, требовать более строгие типы аргументов, чем в родителе).
- Расширять постусловия (например, возвращать более широкий тип или выбрасывать новые исключения, не предусмотренные родителем).
- Нарушать инварианты (например, изменять внутреннее состояние так, чтобы методы родителя перестали работать корректно).
Пример нарушения LSP:
PHPclass Rectangle {protected int $width;protected int $height;public function setWidth(int $w): void { $this->width = $w; }public function setHeight(int $h): void { $this->height = $h; }public function getArea(): int { return $this->width * $this->height; }}class Square extends Rectangle {public function setWidth(int $w): void {$this->width = $w;$this->height = $w; // нарушение: меняет поведение родителя}public function setHeight(int $h): void {$this->height = $h;$this->width = $h; // то же самое}}function printArea(Rectangle $rect): void {$rect->setWidth(5);$rect->setHeight(10);echo $rect->getArea(); // ожидается 50, но для Square будет 100}
Здесь Square не может заменить Rectangle без ошибок, так как нарушает контракт. Правильное решение - не наследовать Square от Rectangle, а использовать общий интерфейс или композицию.
> Похожие задачи по PHP
Расскажите про типизацию в PHP
Что происходит в контроллере после получения запроса
С какими эволюционными базами данных ты работал
Какие тесты ты пишешь: функциональные или юнит тесты?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью