Qu'est-ce que le polymorphisme et comment est-il utilisé en programmation PHP?
sobes.tech IA
Réponse de l'IA
Le polymorphisme est la capacité d’utiliser une même interface pour différents types de données. En PHP, il se manifeste sous plusieurs formes :
-
Héritage (Polymorphisme par sous-type) : Les classes dérivées peuvent redéfinir les méthodes de la classe parente, en fournissant leur propre implémentation. Lorsqu’une méthode est appelée sur un objet de type de base, c’est en réalité la méthode de la classe dérivée spécifique qui sera exécutée, en fonction du type de l’objet.
<?php class Animal { public function makeSound() { echo "Son animal générique\n"; } } class Dog extends Animal { public function makeSound() { echo "Woof!\n"; } } class Cat extends Animal { public function makeSound() { echo "Miau!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Appel de la méthode du sous-type correspondant } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Sortie : Woof! makeAnimalSound($cat); // Sortie : Miau! -
Interfaces (Polymorphisme par interface) : Différentes classes peuvent implémenter la même interface, en promettant de fournir un ensemble défini de méthodes avec la même signature. Cela permet de travailler avec des objets de différentes classes via une interface unique.
<?php interface Shape { public function getArea(); } class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function getArea() { return pi() * $this->radius * $this->radius; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function getArea() { return $this->side * $this->side; } } function calculateTotalArea(array $shapes) { $totalArea = 0; foreach ($shapes as $shape) { if ($shape instanceof Shape) { // Vérification de l’interface $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Affiche la somme des surfaces du cercle et du carré -
Classes abstraites (Polymorphisme par classe abstraite) : Semblable au polymorphisme basé sur les interfaces, mais permet de définir une implémentation de base pour certains méthodes.
Le polymorphisme augmente la flexibilité, l’extensibilité et la maintenabilité du code, permettant d’écrire des algorithmes génériques qui fonctionnent avec des collections d’objets de différents types via une interface commune.