Les interfaces en PHP5
27 mai 2010 par Julien Grossio | Catégorie: Développement web, PHP |
Lors du développement en équipe d’une application en PHP, on s’aperçoit vite de la nécessité d’harmoniser le code, notamment au niveau des méthodes de classes. Ceci dans un but de faciliter la modularisation du script et donc, du développement de nouvelles fonctionnalités.
C’est ici qu’interviennent les interfaces, introduites depuis PHP5. Elles permettent de créer un modèle pour les classes qui l’implémentent, c’est à dire que ces classes devront obligatoirement contenir les méthodes et constantes définies dans l’interface.
Voyons à présent comment déclarer et utiliser une ou plusieurs interfaces en PHP.

Exemple : IActionDB.php
<?php
// déclaration de l'interface de nom IActionsDB
interface IActionsDB {
// méthodes à implémenter
public function add();
public function update($id);
public static function delete($id);
}
?>
Explications :
Nous avons construit ici une interface du nom de IActionsBD. Dans un soucis de lisibilité, je nomme toujours mes interfaces en commençant par la lettre I. On peut ainsi repérer directement le type de script que contient le fichier PHP. De cette façon vous pouvez également appeler vos fichiers de classes : classname.c.php
Bref! Revenons au sujet pour donner quelques explications. Notre interface d’exemple est ici utilisée dans le cadre d’une application nécessitant des interactions avec une base de données. Nous avons déclaré trois méthodes obligatoires pour les classes implémentant l’interface IActionDB ; à savoir :
- public function add(); -> pour ajouter un objet dans la base de données
- public function update($id); -> pour modifier un enregistrement connu dans la bdd
- public static function delete($id); -> pour la suppression
Comme vous l’aurez sans doute remarqué, les méthodes déclarées dans l’interface sont toutes de type public. Ainsi, vous donner un tronc commun à vos développeurs pour l’implémentation, tout en les laissant libre du choix de programmation. En effet, libre au codeur de passer ces méthodes en privés pour une utilisation en interne au sein d’une classe…
Voyons désormais un exemple d’implémentation de notre interface !
Exemple :
<?php
#=======================================#
# @preview Classe User #
# @author Julien GROSSIO #
# @version v250510.1 #
# @mail jul.grossio@gmail.com #
#=======================================#
require_once('../interfaces/IActionsDB.php');
class User implements IActionsDB {
private $login;
private $password;
private $rule;
/**
* constructeur
*/
public function __construct($login,$password,$rule) {
$this->login = $login;
$this->password = $password;
$this->rule = $rule;
}
/**
* ajout de l'utilisateur dans la bdd
*/
public function add() {
$connexion = PDO2::getInstance();
$requete = $connexion->prepare('INSERT INTO users VALUES (NULL, ?, ?, ?)');
if( $requete->execute(array($this->login,$this->password, $this->rule)) )
return true;
else
return false;
}
/**
* Update d'un utilisateur dans la bdd
*/
public function update($id) {
$connexion = PDO2::getInstance();
$requete = $connexion->prepare('UPDATE users SET user_login = ?, user_password = ?, user_rule = ? WHERE user_id = ?');
if( $requete->execute(array($this->login,$this->password,$this->rule,$id)) )
return true;
else
return false;
}
/**
* Suppression d'un utilisateur dans la bdd
*/
public static function delete($id) {
$connexion = PDO2::getInstance();
$requete = $connexion->prepare('DELETE FROM users WHERE user_id = ?');
if( $requete->execute(array($id)) )
return true;
else
return false;
}
/**
* Vérification du combo login/password donné
*/
public static function checkConnection($login,$password){
$connexion = PDO2::getInstance();
$requete = $connexion->prepare('SELECT count(*) as nbres FROM user WHERE user_login = ? AND user_password = ?');
$requete->execute(array($login,$password));
$retour=$requete->fetch(PDO::FETCH_OBJ);
if($retour->nbres==1)return true;
else return false;
}
}
?>
Explications :
Nous avons déclaré une classe User qui implémente l’interface IActionsDB. Pour ce faire, on utilise le mot clé implements. Afin de respecter l’interface implémentée, nous avons défini les trois méthodes, à savoir add(), delete($id) et update($id).
Conclusion et notes
- Les interfaces en PHP deviennent quasiment obligatoires et sont très pratiques dans le développement collaboratif
- Contrairement aux classes abstraites, on peut implémenter plusieurs interfaces dans une classe
- Pour implémenter plusieurs interfaces dans une classe, il faut les séparer par des virgules
Articles (RSS)
Page Facebook
Pas de commentaire »
Pas encore de commentaire.
Laisser un commentaire