Héritage vs. Composition en PHP ?
Lorsque nous programmons orienté objet, il est important de comprendre la différence entre l'héritage et la composition :
Héritage
Une classe hérite d'une autre, réutilisant et étendant son comportement.
class Motor { public function ligar() { return "Motor Ligado!"; } } class Carro extends Motor{} $carro = new Carro(); $carro->ligar();
Composition
Une classe contient des instances d'autres classes pour déléguer des responsabilités. La composition est souvent préférée pour créer des systèmes plus flexibles et éviter les problèmes d'héritage profond.
Exemple pratique
Avez-vous déjà pensé que lorsque nous démarrons la voiture, nous démarrons réellement le moteur ? En suivant ce raisonnement, nous pouvons créer deux objets : un appelé Engine et un autre appelé Car. De cette façon, l'objet Car contiendra une instance de l'objet Engine, qui sera responsable du démarrage de la voiture.
Code
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(); } }
Compréhension
Au lieu que la classe Car ait la logique de démarrage du moteur directement intégrée, elle délègue cette responsabilité à un objet Engine. Cela permet à la classe Car de se concentrer sur ce qu'elle est censée faire, rendant le code plus modulaire et plus facile à maintenir. À l'avenir, vous pourrez changer ou améliorer le moteur sans modifier le code de classe de voiture.
Tests
$motorV4 = new Motor(); $carro = new Carro($motorV4); echo $carro->ligar(); // Saída: Motor Ligado!
Avantages
Cette approche est plus flexible car elle permet à la voiture d'avoir différents types de moteurs (par exemple, un V4, un V6 ou un moteur électrique) sans avoir à changer de classe de voiture. Cette modularité facilite la maintenance et l'expansion du système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!