Héritage en PHP POO

Modificateurs d'accès en PHP
Constantes en PHP POO

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

Lorsqu'une classe dérive d'une autre classe, on parle d'héritage. Voici quelques termes importants liés à l'héritage en PHP.

  • Classe des parents – La classe dont sont dérivées les autres classes est appelée classe parent. Elle est également connue sous le nom de classe de base.
  • Classe enfant – La classe dérivée d'une autre classe est appelée classe enfant. Il existe également d'autres noms, tels que classe feuille ou classe dérivée.
Héritage en PHP

Comment hériter d'une classe en PHP ?

Une classe peut être héritée en utilisant le S'étend mot-clé. Regardez l'exemple suivant.

<?php
class Fruit {
    protected $name;
    protected $color;

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

    public function getName() {
        return $this->name;
    }

    public function getColor() {
        return $this->color;
    }
}

class Apple extends Fruit {
    protected $variety;

    public function __construct($name, $color, $variety) {
        parent::__construct($name, $color);
        $this->variety = $variety;
    }

    public function getVariety() {
        return $this->variety;
    }
}

$apple = new Apple('Apple', 'Red', 'Fuji');
echo $apple->getName(); // Output: Apple
echo $apple->getColor(); // Output: Red
echo $apple->getVariety(); // Output: Fuji
?>

Dans cet exemple, la classe Apple S'étend la classe Fruit, ce qui signifie que la classe Apple contient tous les attributs et méthodes de la classe Fruit en plus des siens. Le constructeur de classe Apple utilise la fonction parent :: construct() pour appeler le constructeur parent, en fournissant les paramètres appropriés. Ensuite, en utilisant l'héritage, vous pouvez créer une instance de la classe Apple et accéder à la fonction à partir de la classe parent.

Pour résumer ce qui précède :

  1. L'héritage permet à la classe enfant d'accéder au __construct public, aux méthodes et aux propriétés de la classe parent.
  2. Dans l'exemple ci-dessus, nous pouvons accéder à la méthode de la classe apple en utilisant son objet, ainsi qu'aux méthodes de la classe parent.

Portée des modificateurs d'accès protégé dans l'héritage

Dans le tutoriel précédent, nous avons appris que les attributs/méthodes protégés d'une classe sont accessibles au sein de la classe et des classes qui en dérivent.

Pour comprendre la portée des modificateurs d'accès protégés dans l'héritage, regardons l'exemple suivant.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Dans l'exemple ci-dessus:

  • Nous créons une classe appelée fruit qui a certaines caractéristiques publiques et une fonction protégée.
  • Nous construisons une autre classe, apple, qui s'étend de Fruit et possède sa propre instance.
  • Lorsque nous essayons d'accéder à la méthode protégée de la classe Fruit à l'aide de l'objet de classe Apple, cela génère une erreur car nous essayons d'accéder au membre protégé de la classe Fruit en dehors de la classe dérivée.

Regardons un autre exemple, qui est essentiellement une version légèrement modifiée du dernier.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

Comme nous y accédons dans la classe de l'exemple précédent, la méthode protégée de la classe Fruit est disponible dans la classe apple.

Remplacement dans l'héritage

Remplacer signifie redéfinir les méthodes de la classe parent dans les classes enfants portant le même nom. Considérez l'exemple de remplacement d'héritage suivant.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

Dans l'exemple ci-dessus:

  • Remplacer signifie renommer les méthodes de la classe parent dans les classes enfants. Considérez l'exemple suivant de remplacement dans l'héritage.
  • Il convient de noter que les méthodes __construct et intro de la classe enfant apple portent le même nom. Cependant, les paramètres peuvent varier.
  • Nous créons une instance de la classe apple et envoyons les arguments à la méthode build.
  • Étant donné que nous avons généré l'instance d'objet apple à l'aide du constructeur de classe apple, lorsque nous appelons la méthode intro à l'aide d'une instance apple, elle appelle la fonction intro de la classe apple.

Rôle du mot-clé final dans l'héritage

Le mot-clé final interdit à la classe enfant/dérivée de remplacer la fonction de la classe parent/base. Regardez l'exemple suivant pour voir comment le mot-clé Final est utilisé.

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

La classe apple tente de remplacer la méthode intro dans l'exemple précédent. Cela générera une erreur puisque nous avons utilisé le mot-clé final avec la fonction d'introduction de la classe Fruit.

Si vous souhaitez en savoir plus sur l'héritage PHP, nous vous recommandons ce qui suit guide officiel.

Questions et réponses

Q :En PHP OOP, qu'est-ce que l'héritage ?
R : En PHP OOP, l'héritage est un système qui permet à une nouvelle classe d'hériter des attributs et des méthodes d'une classe précédente. Cela implique que la nouvelle classe peut réutiliser le code et les fonctionnalités de la classe parent tout en ajoutant ses propres propriétés et méthodes.

Q : En PHP, comment définit-on une classe qui hérite d'une autre classe ?
R : En PHP, le mot-clé "extends" est utilisé pour définir une classe qui hérite d'une autre classe. Par exemple, si vous avez une classe parent « ParentClass » et souhaitez construire une classe enfant « ChildClass » qui en hérite, vous pouvez écrire :

class ChildClass extends ParentClass {
  // properties and methods
}

Q : En PHP, une classe peut-elle hériter de plusieurs classes ?
R : Non, en PHP, une classe ne peut hériter que d'une autre classe. Cependant, les interfaces peuvent être utilisées pour fournir des fonctionnalités équivalentes, et une classe peut implémenter de nombreuses interfaces.

Q : Est-il possible de remplacer une méthode dans une classe enfant ?
R : Oui, vous pouvez remplacer une méthode dans une classe enfant en créant une méthode portant le même nom. Lorsqu'elle est invoquée sur un objet de classe enfant, la méthode de classe enfant sera utilisée à la place de la méthode de classe parent.

Q : Est-il possible d'invoquer une méthode de classe parent à partir d'une classe enfant ?
R : Oui, vous pouvez utiliser le mot clé "parent" suivi de l'opérateur de résolution de portée (::) et du nom de la méthode pour appeler une méthode de classe parent à partir d'une classe enfant. Par exemple:

class ChildClass extends ParentClass {
  public function childMethod() {
    parent::parentMethod();
  }
}

Des exercices:

  1. Quel est le mot clé utilisé en PHP pour indiquer qu'une classe hérite d'une autre classe ?
  2. Comment pouvez-vous accéder à une méthode ou à une propriété de la classe parent dans une classe enfant ?
  3. Comment pouvez-vous appeler le constructeur de la classe parent dans le constructeur d'une classe enfant ?
  4. Comment pouvez-vous empêcher qu'une méthode ou une propriété soit remplacée dans une classe enfant ?
  5. Quelle est la différence entre le extends et implements mots clés en PHP ?

Réponses:

  1. , extends mot clé est utilisé en PHP pour indiquer qu'une classe hérite d'une autre classe.
  2. Vous pouvez accéder à une méthode ou à une propriété de la classe parent dans une classe enfant en utilisant le parent:: mot-clé, suivi du nom de la méthode ou de la propriété.
  3. Vous pouvez appeler le constructeur de la classe parent dans le constructeur d'une classe enfant en utilisant le parent::__construct() méthode.
  4. Vous pouvez empêcher qu'une méthode ou une propriété soit remplacée dans une classe enfant en utilisant la propriété final mot-clé avant la déclaration de méthode ou de propriété dans la classe parent.
  5. , extends est utilisé pour indiquer qu'une classe hérite d'une autre classe, tandis que le implements Le mot clé est utilisé pour indiquer qu'une classe implémente une interface.
Modificateurs d'accès en PHP
Constantes en PHP POO
en English
X
Remonter en haut