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 ballLa 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.
Défi
FacileConstruisons 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 classeVehiclequi sert de classe parente pour tous les véhicules. Elle doit avoir une propriété publique$brandet un constructeur qui accepte et définit la marque. Inclus une méthodestart()qui renvoie"[brand] is starting"et une méthodestop()qui renvoie"[brand] is stopping".Motorcycle.php: définis une classeMotorcyclequi étendVehicle. 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éthodewheelie()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 objetMotorcycleavec 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()
?>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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne