PHP - Héritage : Un Guide Pour Les Débutants

Bonjour à tous, futurs magiciens PHP ! Aujourd'hui, nous allons entreprendre un voyage passionnant à travers le monde de l'héritage en PHP. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - je serai votre guide amical, expliquant tout étape par étape. Alors, prenez une tasse de café (ou de thé, si c'est votre truc), et plongeon dedans !

PHP - Inheritance

Qu'est-ce que l'Héritage ?

L'héritage est comme un arbre généalogique pour les classes en PHP. Tout comme vous pourriez hériter des yeux de votre grand-mère ou du sens de l'humour de votre père, en programmation, une classe peut hériter des propriétés et des méthodes d'une autre classe. Ce concept nous aide à écrire un code plus organisé et réutilisable.

Pensez-y de cette façon : imaginez que vous créez un jeu vidéo avec différents types de personnages. Tous les personnages pourraient partager des caractéristiques de base (comme avoir un nom ou des points de vie), mais chaque type de personnage (comme les guerriers ou les mage) pourrait avoir des capacités uniques. L'héritage nous permet de définir ces caractéristiques communes dans une classe de base et puis de créer des classes de personnages spécifiques qui héritent de ces caractéristiques et ajoutent leurs propres fonctionnalités uniques.

Exemple de Héritage de Base

Commençons avec un exemple simple pour voir comment l'héritage fonctionne en PHP.

class Animal {
public $name;

public function __construct($name) {
$this->name = $name;
}

public function speak() {
echo "L'animal fait un son.";
}
}

class Dog extends Animal {
public function speak() {
echo $this->name . " aboie : Wouf wouf !";
}
}

$myDog = new Dog("Buddy");
$myDog->speak(); // Output : Buddy aboie : Wouf wouf !

Dans cet exemple, nous avons deux classes : Animal et Dog. La classe Dog étend la classe Animal, ce qui signifie qu'elle hérite de toutes les propriétés et méthodes de Animal.

Reprenons :

  1. Nous définissons une classe de base Animal avec une propriété $name et une méthode speak().
  2. Nous créons une classe Dog qui étend Animal en utilisant le mot-clé extends.
  3. La classe Dog redéfinit la méthode speak() avec sa propre implémentation.
  4. Nous créons un nouvel objet Dog nommé "Buddy" et appelons sa méthode speak().

La classe Dog hérite de la propriété $name de Animal, mais fournit sa propre version de la méthode speak(). Cela s'appelle la surcharge de méthode, et c'est une fonctionnalité puissante de l'héritage.

Héritage et Modificateurs d'Accès

Maintenant, parlons de la manière dont l'héritage fonctionne avec différents modificateurs d'accès (public, protected et private).

class Vehicle {
public $brand;
protected $model;
private $serialNumber;

public function __construct($brand, $model, $serialNumber) {
$this->brand = $brand;
$this->model = $model;
$this->serialNumber = $serialNumber;
}

public function getInfo() {
return "Marque : " . $this->brand . ", Modèle : " . $this->model;
}

protected function getSerialNumber() {
return $this->serialNumber;
}
}

class Car extends Vehicle {
public $doors;

public function __construct($brand, $model, $serialNumber, $doors) {
parent::__construct($brand, $model, $serialNumber);
$this->doors = $doors;
}

public function getFullInfo() {
return $this->getInfo() . ", Portes : " . $this->doors . ", SN : " . $this->getSerialNumber();
}
}

$myCar = new Car("Toyota", "Corolla", "ABC123", 4);
echo $myCar->getFullInfo();
// Output : Marque : Toyota, Modèle : Corolla, Portes : 4, SN : ABC123

Dans cet exemple :

  1. La classe Vehicle a des propriétés avec différents modificateurs d'accès.
  2. La classe Car étend Vehicle et ajoute sa propre propriété ($doors).
  3. La classe Car peut accéder aux membres public et protected de Vehicle, mais pas aux membres privés.
  4. Nous utilisons parent::__construct() pour appeler le constructeur de la classe parent.

souvenez-vous :

  • Les membres public sont accessibles depuis n'importe où.
  • Les membres protected sont accessibles à l'intérieur de la classe et de ses sous-classes.
  • Les membres private sont uniquement accessibles à l'intérieur de la classe où ils sont définis.

Le Constructeur dans l'Héritage

Plongeon plus profondément dans la manière dont les constructeurs fonctionnent dans l'héritage :

class Shape {
protected $color;

public function __construct($color) {
$this->color = $color;
echo "Constructeur Shape appelé.<br>";
}
}

class Circle extends Shape {
private $radius;

public function __construct($color, $radius) {
parent::__construct($color);
$this->radius = $radius;
echo "Constructeur Circle appelé.<br>";
}

public function getInfo() {
return "Un cercle {$this->color} avec un rayon {$this->radius}";
}
}

$myCircle = new Circle("rouge", 5);
echo $myCircle->getInfo();

Output :

Constructeur Shape appelé.
Constructeur Circle appelé.
Un cercle rouge avec un rayon 5

Voici ce qui se passe :

  1. Lorsque nous créons un objet Circle, PHP appelle d'abord le constructeur de la classe Shape (la classe parent).
  2. Ensuite, il appelle le constructeur de la classe Circle.
  3. Nous utilisons parent::__construct($color) pour nous assurer que le constructeur de Shape est appelé et que la propriété $color est définie.
  4. Enfin, nous définissons la propriété $radius spécifique à la classe Circle.

Cela garantit que les classes parent et enfant sont correctement initialisées.

Table de Référence des Méthodes

Voici un tableau pratique des méthodes que nous avons utilisées dans nos exemples :

Méthode Description
__construct() Méthode constructrice, appelée lorsque un objet est créé
speak() Méthode pour faire parler un animal
getInfo() Méthode pour obtenir des informations de base sur un véhicule
getSerialNumber() Méthode protected pour obtenir le numéro de série d'un véhicule
getFullInfo() Méthode pour obtenir des informations complètes sur une voiture

Conclusion

L'héritage est un outil puissant en PHP qui nous permet de créer des hiérarchies de classes, favorisant la réutilisation et l'organisation du code. Souvenez-vous, c'est comme construire avec des briques LEGO - vous commencez avec une pièce de base et ajoutez des pièces plus spécifiques par-dessus.

Alors que vous continuez votre voyage en PHP, vous découvrirez de nombreuses autres façons passionnantes d'utiliser l'héritage. Continuez à pratiquer, et bientôt vous créerez des programmes orientés objet complexes et efficaces avec facilité !

Bonne programmation, futurs maîtres PHP ! ??‍??‍?

Credits: Image by storyset