Héritage
MVC en PHP : l'héritage
Le principe de l'héritage
Vous vous souvenez de la fonction membre dbConnect() ? Nous avons dû la recopier à l'identique dans 2 classes différentes : PostManager et CommentManager. On a donc la même fonction dans 2 fichiers différents. Nos 2 classes ont besoin d'une fonction commune. Comment leur faire partager cette fonction ? Avec l'héritage !Une classe peut hériter d'une autre classe pour en récupérer toutes ses caractéristiques.
Utiliser l'héritage avec le modèle
On va faire hériter nos classes PostManager et CommentManager d'une nouvelle classe nommée Manager dans un nouveau fichier du dossier model : Manager.php. Cette classe va contenir la fonction de connexion à la base de données :model/Manager.php
<?php
class Manager {
protected function dbConnect() {
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
return $db;
}
}
Vous pouvez voir que la fonction dbConnect() n'est ni private ni public, elle est... protected. Le type protected est identique à private, mais il autorise quand même les classes filles à appeler la fonction.
Nos classes PostManager et CommentManager doivent être mises à jour pour qu'elles héritent de Manager (on dit aussi qu'elles "l'étendent", car on utilise le mot-clé extends).
model/PostManager.php
model/CommentManager.php
model/PostManager.php
<?php
require_once("model/Manager.php");
class PostManager extends Manager {
// ...
}
model/CommentManager.php
<?php
require_once("model/Manager.php");
class CommentManager extends Manager {
// ...
}