Polymorphisme

  • Réduit, mais existant:
  • Nécessite un typage : donc uniquement possible via les paramètres de fonction.
  • Seulement sur les classes, pas sur les types de base
  • Le polymorphisme (du grec plusieurs formes) est le mécanisme grâce auquel une même méthode peut être implémentée par plusieurs types (donc plusieurs classes) favorisant ainsi la généricité. Concrêtement, si une méthode est déclarée et/ou définie dans la classe parente d’une classe donnée, vous n’avez pas à vous préocuper du type précis de la fille avec laquelle vous travaillez pour l’utiliser.
  • Par exemple, une méthode obtenirAire est commune aux classes Cercle, Carre et Rectangle qui héritent toutes de Forme. Quand vous travaillez avec une instance de Forme, vous n’avez donc plus à vous soucier de savoir si c’est un cercle, un carré ou un rectangle pour obtenir son aire.
  • Comme dans la plupart des langages objet, le polymorphisme en PHP est un polymorphisme par sous-typage (ou dérivation) c’est à dire qu’on va se servir de la redéfinition de comportements prévue par l’héritage pour faire du polymorphisme. Nous avons vu plus haut avec Vehicule, Voiture et Moto qu’il est possible de redéfinir une méthode de la classe mère dans sa fille (en l’occurence, il s’agissait de son constructeur). Nous allons maintenant voir qu’il est possible d’aller plus loin.
<?php

class Vehicule {
    public $nombreRoues;

    function afficher() {
        echo "vehicule : nbre roues " . $this->nombreRoues;
    }
}

class Voiture extends Vehicule {
    public $tailleCoffre;

    function afficher()
        parent::afficher();
        echo "voiture: taille du coffre " .         $this->tailleCoffre;
    }
}

function affichage(Vehicule $unVehicule) {
    $unVehicule->afficher();
}

$maVoiture = new Voiture();
$maVoiture->tailleCoffre=300;
$maVoiture->nombreRoues=4;
affichage($maVoiture);

Sujet précédent

Héritage

Sujet suivant

OO avancé

Cette page