Médiaforma

PHP MySQL – Polymorphisme

Print Friendly

La notion de polymorphisme est assez abstraite et peu utile en PHP. Elle découle de la notion d’héritage. Supposons qu’une classe Laser et trois classes dérivées CD, DVD et Blue aient été définies. Les trois classes dérivées ont toutes les caractéristiques de la classe Laser. Ainsi, des objets de type CD, DVD et Blue peuvent être traités comme des objets de type Laser. Cependant, il est possible de surcharger les méthodes d’instance de la classe parente afin d’induire des comportements spécifiques aux classes dérivées.

class Laser {
  public function caracteristiques() {
    echo "Disque laser<br>";
  }
}
class CD extends Laser{
  public function caracteristiques() {
    parent::caracteristiques();
    echo "Capacité : 700 Mo<br>";
  }
}
class DVD extends Laser {
  public function caracteristiques() {
    parent::caracteristiques();
    echo "Capacité : 4,7 Go<br>";
  }
}
class Blue extends Laser {
  public function caracteristiques() {
    parent::caracteristiques();
    echo "Capacité : 25 Go<br>";
  }
}

Sans entrer dans le détail du code, vous pouvez comprendre que les classes héritées CD, DVD et Blue surchargent la méthode publique caracteristiques de la classe parente laser. Elles conservent le comportement de la méthode parente (parent::caracteristiques();) et la complètent avec des informations qui leur sont spécifiques.

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

« La notion de polymorphisme est assez abstraite et peu utile en PHP »

Je ne suis pas du tout d’accord, le terme polymorphisme est un concept objet, ce n’est pas plus utile en C++, JAVA etc.. qu’en PHP.
L’interêt est de pouvoir manipuler plusieurs classes sans ce soucier du type, car toutes ces classes se manipulent de la même façon étant donné qu’elles héritent de la même interface (ou classe abstraite).

Dans votre exemple on pourrait imaginer la fonction suivante :
function doSomething(Laser &param) { param->caracteristiques(); }

Ainsi on a pas besoin de se soucier de savoir si on a affaire a un DVD ou autre chose. Cela permet aussi d’éviter des erreurs, du style appeller la fonction avec un mauvais type, la il n’y a pas d’ambiguiter sur le type de paramètre utilisé.