Menu
Coddy logo textTech

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 Labrador

En 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.

challenge icon

Défi

Facile

Construisons 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 classe Product qui servira de base à tous les produits. Elle doit avoir les propriétés publiques $name et $price. Le constructeur accepte un nom et un prix, puis définit ces deux propriétés. Incluez une méthode getDetails() qui renvoie "[name]: $[price]".
  • ElectronicProduct.php : définissez une classe ElectronicProduct qui étend Product. 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 : utilisez parent::__construct() pour initialiser le nom et le prix via la classe parente, puis définissez vous-même la garantie. Créez une méthode getDetails() qui s’appuie sur l’implémentation de la classe parente : appelez parent::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 un ElectronicProduct avec 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()

?>
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