Le mot-clé parent::
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 22 sur 91.
Lorsqu’une classe enfant hérite d’une classe parente, vous devez parfois accéder directement aux méthodes ou aux propriétés de la classe parente. Le mot-clé parent:: vous permet d’appeler l’implémentation de la classe parente depuis la classe enfant.
C’est particulièrement utile dans les constructeurs lorsque l’enfant doit initialiser les propriétés du parent tout en configurant les siennes :
<?php
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
public $breed;
public function __construct($name, $breed) {
parent::__construct($name);
$this->breed = $breed;
}
public function describe() {
return "$this->name is a $this->breed";
}
}
$dog = new Dog("Max", "Labrador");
echo $dog->describe();
Sortie :
Max is a LabradorEn appelant parent::__construct($name), la classe enfant réutilise la logique d’initialisation de parent au lieu de la dupliquer. Sans cet appel, la propriété $name ne serait jamais définie.
Vous pouvez utiliser parent:: pour appeler n’importe quelle méthode parente, et pas seulement les constructeurs. Cela devient particulièrement important lorsque vous souhaitez étendre le comportement d’une méthode plutôt que de la remplacer complètement.
Point clé : Le mot-clé parent:: permet d’accéder à l’implémentation de la classe parent. Il est essentiel pour chaîner correctement les constructeurs et s’appuyer sur les fonctionnalités héritées plutôt que de les réécrire.
Défi
FacileConstruisons un système de catalogue de produits qui montre comment les classes enfants peuvent étendre les fonctionnalités des classes parentes en utilisant le mot-clé parent:: pour chaîner correctement les constructeurs et s’appuyer sur les méthodes héritées.
Vous organiserez votre code dans trois fichiers :
Product.php: définissez une classeProductqui servira de base à tous les produits. Elle doit avoir les propriétés publiques$nameet$price. Le constructeur accepte un nom et un prix, puis définit ces deux propriétés. Incluez une méthodegetDetails()qui renvoie"[name]: $[price]".ElectronicProduct.php: définissez une classeElectronicProductqui étendProduct. Incluez le fichier Product au début. Cette classe ajoute une propriété$warranty(en mois). Le constructeur doit accepter un nom, un prix et une garantie : utilisezparent::__construct()pour initialiser le nom et le prix via la classe parente, puis définissez vous-même la garantie. Créez une méthodegetDetails()qui s’appuie sur l’implémentation de la classe parente : appelezparent::getDetails()et ajoutez-y" (Warranty: [warranty] months)".main.php: incluez le fichier ElectronicProduct. Vous recevrez trois entrées : le nom du produit, le prix (sous forme de chaîne à convertir en nombre flottant) et la période de garantie (sous forme de chaîne à convertir en entier). Créez unElectronicProductavec ces valeurs et affichez le résultat de l’appel àgetDetails().
Ce défi montre toute la puissance de parent::. Il ne sert pas uniquement à chaîner les constructeurs, mais aussi à étendre le comportement des méthodes. Votre ElectronicProduct réutilise la logique de formatage de la classe parente et ajoute ses propres détails par-dessus, évitant ainsi la duplication de code tout en produisant un résultat plus riche.
Essayez vous-même
<?php
require_once 'ElectronicProduct.php';
// Lire les entrées
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));
// TODO: Créer un ElectronicProduct avec les valeurs d'entrée
// et afficher le résultat de l'appel à getDetails()
?>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