TUTORIEL PHP 
PHP : les design patterns Singleton et Factory
Les design patterns sont une source de solutions fiables et reconnues aux problèmes courants du développement Objet. Explications de deux des patterns fondamentaux, avec code source en PHP. (14/04/2006)
  1. Présention et modèle Singleton
2. Méthode Factory

Les modèles de conception, en anglais design patterns, font partie du paysage du développeur ne souhaitant pas réinventer la roue à chaque projet, au même titre que les pratiques Objet courantes comme l'héritage ou l'encapsulation. Ces modèles, ou motifs, ne correspondent pas à des template de code tout fait, mais à des solutions reconnues aux problèmes courants du développeur Objet (lire notre article du 18/04/03).

L'intérêt premier est de pouvoir se reposer sur des réponses éprouvées aux questions récurrentes, ce qui amène non seulement une rapidité accrue de développement pour cela qui connaît le modèle adéquat à son problème, mais également favorise la communication d'une solution à un problème, chaque modèle disposant d'un nom établi et accepté par tous.

Les modèles sont présentés à l'aide du problème (ou de l'intention du développeur), du contexte d'application ou d'un scénario, et de la solution suggérée. Dans la littérature, un modèle est accompagné d'une représentation de son fonctionnement, le plus souvent à l'aide d'UML.

PHP pouvait déjà profiter de ces modèles depuis sa version 4, qui introduisant certains mécanismes Objet clefs dans la syntaxe. PHP5 propose une syntaxe beaucoup plus robuste et complète, aussi l'utilisation de modèles avec ce langage ne peut que renforcer la méthode de développement d'une application Web.

Nous allons donc voir 2 modèles de conception parmi les plus courants et utiles, code source à l'appui. L'idée ici n'est pas de donner une vision exhaustive de ces modèles, mais de donner les clefs pour comprendre comment utiliser un modèles en PHP.

Singleton
Singleton est l'un des modèles les plus simples à implémenter. Son objectif est simple : restreindre les capacités d'instanciation d'une classe, le plus souvent à un seul objet. Son implémentation est également simple : il ne nécessite qu'une seule classe.

Sa création répond au besoin de ne pas dupliquer certaines instances de classe : accès à la base de données, gestion des threads, gestion du cache... Singleton permet de limiter l'usage des ressources. Plusieurs instances de différentes classes peuvent ainsi se reposer sur une seule instance de la classe appliquant ce modèle.
  1. <?php
  2. class MaClasse {
  3.   private static $instance;
  4.  
  5.   private function __construct() {
  6.     echo "Instanciation de MaClasse";
  7.     }
  8.  
  9.   public static function getInstance {
  10.     if ( !isset(self::instance) ) {
  11.       self::$instance = new MaClasse();
  12.       }
  13.     return self::$instance;
  14.     }
  15.  
  16.   public function mangerCarotte() {
  17.     echo "Gnip gnip !";
  18.     }
  19.   }
  20. ?>
L'idée d'un modèle est donc de faire usage des principes Objet pour obtenir ce que l'on veut. Ici, on déclare une variable interne $instance, qui contiendra la référence à l'instance de la classe. Le constructeur est déclaré private, pour que seule cette classe puisse l'invoquer... et donc instancier cette classe. Cela rend a priori la classe impossible à instancier, vu qu'elle ne peut l'être que par elle-même, mais le tour de passe-passe est réalisé par une méthode publique getInstance(), qui nous fournit un moyen d'instancier la classe, et d'en retourner une instance.

getInstance() contient une instance unique de $instance (c'est une variable statique). Si $instance n'est pas affectée, c'est que l'instance n'est pas encore créée. On instancie donc la classe depuis sa méthode publique getInstance(), et on affecte $instance, que l'on renvoi.

  Forum

Réagissez dans les forums de JDN Développeurs

Si $instance était déjà affectée, l'instance était donc créée lors de l'appel de getInstance, donc on annule l'instanciation demandée. Les autres méthodes de la classe sont alors accessibles.

La mise en place du modèle Singleton est encore plus simple avec PHP 5 : il suffit d'utiliser des méthodes statiques :
  1. <?php
  2. class MaClasse {
  3.   public static function mangerCarotte() {
  4.     echo "Gnip gnip !";
  5.     }
  6.   }
  7. ?>

  1. Présention et modèle Singleton
2. Méthode Factory
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages