Что такое проблема наследования? Почему композиция лучше?

Ответ

Проблемы наследования:

  • Tight coupling - изменение базового класса ломает наследников
  • Fragile base class - хрупкость базового класса
  • Diamond problem (через трейты)
  • Нарушение инкапсуляции (protected свойства)
  • Иерархия становится глубокой и сложной

Композиция - объект содержит другие объекты и делегирует им работу:

// Плохо: наследование
class ElectricCar extends Car { /* ... */ }

// Хорошо: композиция
class Car {
    public function __construct(
        private Engine $engine,
        private Transmission $transmission,
    ) {}
}

Правило: используйте наследование для отношения "является" (is-a), композицию для "содержит" (has-a).

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.