Наследование против. Композиция в PHP ?
Когда мы программируем объектно-ориентированно, важно понимать разницу между наследованием и композицией:
Наследство
Один класс наследует другой, повторно используя и расширяя его поведение.
class Motor { public function ligar() { return "Motor Ligado!"; } } class Carro extends Motor{} $carro = new Carro(); $carro->ligar();
Композиция
Класс содержит экземпляры других классов для делегирования обязанностей. Композицию часто предпочитают для создания более гибких систем и избежания проблем с глубоким наследованием.
Практический пример
Вы когда-нибудь задумывались о том, что когда мы запускаем машину, мы на самом деле запускаем двигатель? Следуя этим рассуждениям, мы можем создать два объекта: один с именем Engine, а другой с именем Car. Таким образом, объект «Автомобиль» будет содержать экземпляр объекта «Двигатель», который будет отвечать за запуск автомобиля.
Код
class Motor { public function ligar() { return "Motor Ligado!"; } } class Carro { private Motor $motor; public function __construct(Motor $motor) { $this->motor = $motor; } public function ligar() { return $this->motor->ligar(); } }
Понимание
Вместо того, чтобы класс Car имел непосредственно встроенную логику запуска двигателя, он делегирует эту ответственность объекту Engine. Это позволяет классу Car сосредоточиться только на том, что он должен делать, делая код более модульным и простым в обслуживании. В дальнейшем вы сможете изменить или улучшить двигатель без изменения кода класса автомобиля.
Тестирование
$motorV4 = new Motor(); $carro = new Carro($motorV4); echo $carro->ligar(); // Saída: Motor Ligado!
Преимущества
Этот подход является более гибким, поскольку позволяет автомобилю иметь разные типы двигателей (например, V4, V6 или электрический двигатель) без необходимости изменения класса автомобиля. Такая модульность облегчает обслуживание и расширение системы.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3