Médiaforma

All posts tagged héritage

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.


Il est possible de créer un nouveau type d’objet en prenant comme modèle un type objet déjà existant. Le nouvel objet possèdera (héritera) les mêmes propriétés et les mêmes méthodes que son modèle, avec toutefois la possibilité d’ajouter de nouvelles propriétés et/ou de nouvelles méthodes ou de redéfinir les méthodes existantes. On dira que le nouvel objet est un objet dérivé ou un descendant de l’ancien.

Cette notion d’héritage permet de ne pas avoir à réécrire des méthodes déjà écrites. D’autre part les corrections ou modifications du code pourront être réalisées plus rapidement et de façon plus sûre.


La programmation orientée objet (POO) a essentiellement deux avantages. Elle :

  • facilite l’organisation du code et donc le développement ;
  • permet de définir des modules réutilisables.

La programmation orientée objets repose sur trois notions fondamentales : l’encapsulation, l’héritage et le polymorphisme.

Les classes définissent des structures composées de variables et de fonctions. Pour utiliser les termes propres à la POO, les variables d’une classe sont appelées propriétés. Quant aux fonctions de la classe, elles sont appelées méthodes.

Les instances, c’est-à-dire les utilisations d’un type classe, sont appelées des objets. Les variables et fonctions d’une classe sont appelés composants ou membres de la classe.

Si vous avez du mal à vous y retrouver avec tous ces nouveaux termes, nous allons faire une analogie. Considérez une classe comme une usine qui fabrique des voitures. Les instances de l’usine (la classe) sont des voitures (les objets). La cylindrée, la couleur, le type des pneus, etc. sont des caractéristiques (propriétés) propres à chaque voiture. Selon les caractéristiques des voitures à fabriquer, il faut appliquer différents procédés de fabrication (méthodes).