Qu'est-ce qu'un singleton ?

Le singleton est un modèle de conception (design pattern pour les grands bretons). En clair c'est une façon éprouvée de résoudre un problème. Avec le sinleton on cherche à n'avoir qu'une seule instance d'un même objet.

L'implémentation de l'objet singleton consiste à créer une instance de l'objet uniquement si elle n'existe pas encore. On stocke l'instance unique dans une propriété statique de l'objet. Cela peut donner quelque chose comme cela:

<?php
class Singleton {
  private static 
$instance null;
  
  private function 
__construct() {
  }

  public static function 
getInstance() {
    if (
self::$instance==null) {
      
self::$instance = new Singleton();
    }
    return 
self::$instance;
  }
}
?>

La théorie c'est bien joli mais j'entends déjà les questions fuser: à quoi ça sert et comment on s'en sert ? Pour répondre à la première question, je dirais qu'à chaque fois que l'on a besoin d'un objet qui doit rester unique, on utilise un singleton. Je pense par exemple à une classe de log ou une classe de debbugage.

Pour la deuxième question, voici la façon de récupérer l'instance unique:

<?php
$instance1 
Singleton::getInstance();
echo 
'<pre>Instance n°1:'var_dump($instance1), '</pre>';

$instance2 Singleton::getInstance();
echo 
'<pre>Instance n°2:'var_dump($instance2), '</pre>';
?>

En exécutant ce code, on obtient:

Instance n°1:object(Singleton)#1 (0) {
}

Instance n°2:object(Singleton)#1 (0) {
}

#1 est une référence vers l'instance. Dans les deux cas on a la même, ce qui est le but recherché. Au prochain épisode je vous donne un exemple concret!

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.