Menu
Coddy logo textTech

Héritage de base

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 21 sur 91.

L’héritage permet à une classe d’acquérir des propriétés et des méthodes depuis une autre classe. Au lieu de réécrire le même code, tu peux créer une classe de base avec des fonctionnalités communes et faire en sorte que d’autres classes en héritent.

La classe dont on hérite est appelée la classe parent (ou classe de base), et la classe qui hérite est appelée la classe enfant. Vous utilisez le mot-clé extends pour établir cette relation :

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function speak() {
        return "$this->name makes a sound";
    }
}

class Dog extends Animal {
    public function fetch() {
        return "$this->name fetches the ball";
    }
}

$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();

Sortie :

Buddy makes a sound
Buddy fetches the ball

La classe Dog a automatiquement accès à la propriété $name, au constructeur et à la méthode speak() de Animal. Elle définit également sa propre méthode fetch() que seuls les chiens possèdent.

Cela crée une hiérarchie claire : chaque chien est un animal, il est donc logique que Dog hérite de Animal. La classe enfant peut utiliser tout ce qui vient de la classe parente tout en ajoutant son propre comportement spécialisé.

Point clé : L’héritage favorise la réutilisation du code et établit des relations logiques entre les classes. La classe enfant hérite de tous les membres publics et protégés de la classe parente, ce qui réduit la duplication et facilite la maintenance de votre code.

challenge icon

Défi

Facile

Construisons un système de hiérarchie de véhicules qui montre comment l’héritage permet aux classes enfants de partager les fonctionnalités d’une classe parente tout en ajoutant leurs propres comportements spécialisés.

Tu organiseras ton code sur trois fichiers :

  • Vehicle.php : définis une classe Vehicle qui sert de classe parente pour tous les véhicules. Elle doit avoir une propriété publique $brand et un constructeur qui accepte et définit la marque. Inclus une méthode start() qui renvoie "[brand] is starting" et une méthode stop() qui renvoie "[brand] is stopping".
  • Motorcycle.php : définis une classe Motorcycle qui étend Vehicle. Inclus le fichier Vehicle en haut du fichier. La classe Motorcycle n’a pas besoin de son propre constructeur, car elle héritera du constructeur parent. Ajoute une méthode wheelie() qui renvoie "[brand] is doing a wheelie!". Il s’agit d’un comportement propre aux motos.
  • main.php : inclus le fichier Motorcycle (qui inclut déjà Vehicle). Tu recevras une entrée : la marque de la moto. Crée un objet Motorcycle avec cette marque. Affiche le résultat de l’appel à start(), puis à wheelie(), puis à stop(), chacun sur sa propre ligne.

Remarque comment la classe Motorcycle hérite automatiquement de la propriété $brand, du constructeur et des méthodes start() et stop() de Vehicle. La classe enfant doit seulement définir ce qui la rend unique, ici la capacité à faire un wheeling. C’est là toute la puissance de l’héritage : écrire les fonctionnalités communes une seule fois dans la classe parente, puis permettre aux classes enfants de les réutiliser tout en ajoutant leurs propres spécialisations.

Essayez vous-même

<?php
// Inclure la classe Motorcycle (qui inclut déjà Vehicle)
require_once 'Motorcycle.php';

// Lire l'entrée
$brand = trim(fgets(STDIN));

// TODO: Créer un objet Motorcycle avec la marque

// TODO: Afficher le résultat de start()

// TODO: Afficher le résultat de wheelie()

// TODO: Afficher le résultat de stop()
?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne