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 CarAppel à 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
publicetprotectedsont accessibles dans les classes enfants. - Les propriétés et méthodes
privatene 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 | ❌ |