Skip to content

Héritage

Objectifs pédagogiques

  • Comprendre la notion d’héritage entre classes.
  • Savoir hériter d’une classe parente.
  • Redéfinir ou compléter des méthodes héritées.
  • Utiliser parent:: pour appeler un comportement du parent.

Définition

L’héritage permet de créer une classe à partir d’une autre. Cela permet :

  • de réutiliser du code existant,
  • de spécialiser le comportement d’une classe,
  • de factoriser la logique commune dans une classe parente.

On utilise le mot-clé extends pour définir une classe enfant.

Exemple simple

php
<?php

class Vehicle {
    protected string $brand;

    public function __construct(string $brand) {
        $this->brand = $brand;
    }

    public function start(): void {
        echo "Le véhicule démarre";
    }
}

class Car extends Vehicle {
    public function honk(): void {
        echo "La voiture klaxonne";
    }
}

$car = new Car("Peugeot");
$car->start();    // Hérité de Vehicle
$car->honk();     // Défini dans Car

Appel à la classe parente

On utilise parent:: pour accéder à une méthode ou un constructeur de la classe parente.

php
<?php

class Car extends Vehicle {
    public function __construct(string $brand) {
        parent::__construct($brand); // Appel du constructeur parent
    }

    public function start(): void {
        parent::start(); // Appelle la méthode start() de Vehicle
        echo " puis roule...";
    }
}

Réécriture de méthodes

Une classe enfant peut redéfinir une méthode de la classe parente. C’est ce qu’on appelle l’override.

php
<?php

class Truck extends Vehicle {
    public function start(): void {
        echo "Le camion démarre lentement...";
    }
}

Portée et héritage

  • Les propriétés et méthodes public et protected sont accessibles dans les classes enfants.
  • Les propriétés et méthodes private ne sont pas héritées directement (elles existent, mais sont inaccessibles).
  • Une méthode redéfinie doit respecter la signature d’origine.

Bonnes pratiques

  • Utiliser l’héritage pour représenter une relation naturelle entre entités.
  • Ne pas abuser de l’héritage : si le lien logique n’est pas clair, envisager une composition.
  • Utiliser parent:: pour réutiliser proprement les méthodes du parent.

Résumé

Élément héritéAccès dans la classe enfant
Propriété public
Propriété protected
Propriété private
Méthode public
Méthode protected
Méthode private