Ce concept permet à une classe d’hériter des propriétés et des méthodes d’une autre classe (une classe parente). Cela permet de réutiliser du code pour ainsi éviter de réinventer la roue ! Cette relation hiérarchique est idéale pour une meilleure flexibilité du code, réduction de la duplication du code…

Héritage de base

class Vehicule {
    public $marque;

    public function demarrer() {
        echo "Le véhicule démarre.\n";
    }
}

//ici la classe Voiture hérite de la classe Vehicule
class Voiture extends Vehicule {
    public $nombreDePortes;

    public function fermerLesPortes() {
        echo "Les portes sont fermées.\n";
    }
}

$maVoiture = new Voiture();
$maVoiture->marque = "Fiat";
$maVoiture->demarrer(); // Hérité de la classe Véhicule
$maVoiture->fermerLesPortes(); // Propre à la classe Voiture

Surcharge de méthode

On parle de surcharge quand une classe héritière a la même nom qu’une méthode déclarée dans la classe parente.

class Animal {
    public function faireDuBruit() {
        echo "L'animal fait du bruit.\n";
    }
}

class Chien extends Animal {
  //Ici la méthode faireDuBruit() est surchargée car exploitée à la fois dans la classe parente et héritière. 
    public function faireDuBruit() {
        echo "Le chien aboie.\n";
    }
}

$monChien = new Chien();
$monChien->faireDuBruit(); // Affiche "Le chien aboie.". 

Accès Protected

Les niveaux de visibilité protected peuvent être invoquées dans un système d’héritage :

class CompteBancaire {
    protected $solde;

    public function __construct($soldeInitial) {
        $this->solde = $soldeInitial;
    }
}

class CompteEpargne extends CompteBancaire {
    public function afficherSolde() {
        echo "Le solde est de " . $this->solde . "€.\n";
    }
}

$monEpargne = new CompteEpargne(1000);
$monEpargne->afficherSolde(); // Accède à la propriété protégée $solde

Le constructeur

Si une sous-classe ne définit pas son propre constructeur, le constructeur de la classe parent (si présent) est appelé automatiquement

class Vehicule {
    public $marque;

    public function __construct($marque) {
        $this->marque = $marque;
        echo "Véhicule de marque " . $this->marque . " créé.\n";
    }
}

class Voiture extends Vehicule {
    // Aucun constructeur défini ici, le constructeur de Véhicule est appelé.
}

$maVoiture = new Voiture("Peugeot");

Le constructeur d’une classe héritière

Dans l’exemple ci-dessous, Moto définit son propre constructeur et appelle également le constructeur de Véhicule en utilisant parent::__construct($marque). Cela permet d’initialiser à la fois les propriétés définies dans Véhicule et celles spécifiques à Moto :

class Vehicule {
    public $marque;

    public function __construct($marque) {
        $this->marque = $marque;
        echo "Véhicule de marque " . $this->marque . " créé.\n";
    }
}

class Moto extends Vehicule {
    public $type;

    public function __construct($marque, $type) {
        parent::__construct($marque); // Appel explicite au constructeur parent
        $this->type = $type;
        echo "Moto de type " . $this->type . " créée.\n";
    }
}

$maMoto = new Moto("Suzuki", "Sportive");

Ce site est susceptible d'utiliser des cookies pour améliorer votre expérience utilisateur