Héritage PHP
Introduction à la programmation orientée objet en PHP
Classes étendues et héritage
Un des grands intérêts de la POO est qu'on va pouvoir rendre notre code très modulable, ce qui va être très utile pour gérer un gros projet ou si on souhaite le distribuer à d'autres développeurs.
Il va être possible plutôt que de créer des classes complètement nouvelles, d'étendre (les possibilités) de classes existantes, c'est-à-dire de créer de nouvelles classes qui vont hériter des méthodes et propriétés de la classe qu'elles étendent (sous réserve d'y avoir accès) tout en définissant de nouvelles propriétés et méthodes qui leur sont propres.
Le fichier classes/admin.class.php<?php
class Admin extends Utilisateur {
}
Notez par ailleurs ici que si une classe fille ne définit pas de constructeur ni de destructeur, ce sont les constructeur et destructeur du parent qui vont être utilisés.
⚠ Attention de ne pas redéfinir une méthode (non privée) ou une propriété (non privée) dans une classe fille, car on dit qu'on surcharge celle de la classe mère.
Si on souhaite que des classes étendues puissent manipuler les propriétés d'une classe mère, alors il faudra définir le niveau de visibilité de ces propriétés comme protected dans la classe mère.
Fichier principal
Fichier index.php<!DOCTYPE html>
<html lang="fr">
<head>
<title>POO PHP</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/mesStyles.css">
</head>
<body>
<h1>Inscription</h1>
<?php
require 'classes/utilisateur.class.php';
require 'classes/admin.class.php';
// nouvelles instances de notre classe Utilisateur
$Admin1 = new Admin('Mimi', 123456);
$Utilisateur1 = new Utilisateur('Fifi', 'abcdef');
echo $Admin1 -> getNom().'<br>';
echo $Utilisateur1 -> getNom().'<br>';
?>
</body>
</html>
-> Voir cet exemple Easy-Micro
Méthodes de la class Admin
Permettre aux objets de la classe Admin de bannir un utilisateur ou d’obtenir la liste des utilisateurs bannis.
Le fichier classes/admin.class.php<?php
class Admin extends Utilisateur {
protected $ban;
public function setBan($b){
$this -> ban[] .= $b;
}
public function getBan(){
echo 'Utilisateurs bannis par '.$this->user_name. ' : ';
foreach($this -> ban as $valeur){
echo $valeur .', ';
}
}
}
On peut ensuite utiliser ces deux méthodes (setBan et getBan) dans notre fichier principal
Le fichier index.php<?php
// ...
// bannir des utilisateurs
$Admin1 -> setBan('Paul');
$Admin1 -> setBan('Jean');
// affichage des utilisateurs bannis
echo $Admin1 -> getBan();
//...
-> Voir cet exemple Easy-Micro