L'héritage



L'héritage est probablement le concept le plus important de la programmation orientée objet. C'est ce qui lui donne toute sa puissance. Cela permet de réutiliser des classes pour en construire de nouvelles. On se sert de certaines classes « de base » pour construire des classes plus complètes.


Comment reconnaître un héritage ?


C'est LA question à se poser. Certains ont tellement été traumatisés par l'héritage en cours de programmation qu'ils en voient partout, d'autres au contraire (surtout les débutants) se demandent à chaque fois s'il y a un héritage à faire ou non. Pourtant, ce n'est pas « mystique », il est très facile de savoir s'il y a une relation d'héritage entre deux classes.

Comment ? En suivant cette règle très simple :


Il y a héritage quand on peut dire : « A est un B ».


Pas de panique, ce ne sont pas des maths. ;-)


Prenez un exemple très simple. On peut dire « Un administrateur est un membre », ou encore « Un modérateur est un membre ». Donc on peut faire un héritage : « La classe Admin hérite de Membre », « La classe Moderateur hérite de Membre ».


Pour vous imprégner, voici quelques autres bons exemples où un héritage peut être fait :

  • une voiture est un véhicule (Voiture hérite de Vehicule) ;
  • un bus est un véhicule (Bus hérite de Vehicule) ;
  • un moineau est un oiseau (Moineau hérite d'Oiseau) ;
  • un corbeau est un oiseau (Corbeau hérite d'Oiseau) ;
  • un chirurgien est un docteur (Chirurgien hérite de Docteur) ;
  • un diplodocus est un dinosaure (Diplodocus hérite de Dinosaure) ;
  • etc.


En revanche, vous ne pouvez pas dire « Un dinosaure est un diplodocus », ou encore « Un bus est un oiseau ». Donc on ne peut pas faire d'héritage dans ces cas-là, du moins ça n'aurait aucun sens. ;-)


Réaliser un héritage en PHP


Nous allons créer une nouvelle classe Admin qui sera basée sur la classe Membre. Elle aura toutes les variables et fonctions de la classe Membre, mais elle aura en plus de nouvelles variables et fonctions.

Créez un fichier Admin.class.php (souvenez-vous, on fait un fichier par classe !) et insérez-y le code suivant pour commencer :

<?php

include_once('Membre.class.php');

 

class Admin extends Membre

{

 

}

?>


Le nouveau mot-clé ici est extends, qui signifie « étend ». Traduction : la classe Admin étend [les possibilités de] la classe Membre. C'est cela l'héritage : nous avons maintenant une classe Admin qui possède toutes les variables et fonctions de Membre, et nous allons pouvoir en définir de nouvelles qui seront propres aux admins.


Pour que PHP connaisse la classe Membre afin de permettre l'héritage, il est impératif d'inclure le fichier  Membre.class.php au préalable.

Rajoutons maintenant des fonctionnalités qui seront propres aux admins. Par exemple, ceux-ci, grâce à leurs privilèges, peuvent choisir la couleur dans laquelle sera écrit leur pseudonyme. Ils ont donc une variable $couleur et des fonctions qui permettent de la lire et de la modifier :

<?php

include_once('Membre.class.php');

 

class Admin extends Membre

{

    private $couleur;

 

    public function setCouleur()

    {

        // ...

    }

     

    public function getCouleur()

    {

        // ...

    }

}

?>


Nous avons donc maintenant deux classes : Membre et Admin.

  • Avec Membre, on peut manipuler un pseudo, une adresse e-mail, une signature et un état actif ou non.
  • Avec Admin, on peut manipuler les mêmes choses : un pseudo, une adresse e-mail, une signature et un état actif ou non… mais aussi de nouvelles propriétés, comme la couleur du pseudo.


Un peu de vocabulaire : on dit que Membre est la classe mère, tandis que Admin est la classe fille. C'est la fille qui hérite de la mère, imparable logique de programmeur.


Dans notre fichier index.php on peut maintenant créer des membres mais aussi des admins :

<?php

$membre = new Membre(31); // Contient un pseudo, une adresse e-mail...

$maitreDesLieux = new Admin(2); // Contient les mêmes données qu'un membre + la couleur

 

$membre->setPseudo('Arckintox'); // OK

$maitreDesLieux->setPseudo('M@teo21'); // OK

 

$membre->setCouleur('Rouge'); // Impossible (un membre n'a pas de couleur)

$maitreDesLieux->setCouleur('Rouge'); // OK

?>


Avec peu d'efforts, nous avons créé une nouvelle classe qui réutilise une classe existante. On peut donc appeler la fonction setPseudo comme pour les membres, et on peut en plus effectuer de nouvelles opérations, comme définir une couleur de pseudo.

Créé avec HelpNDoc Personal Edition: Convertissez rapidement et facilement votre document Word en eBook ePub ou Kindle