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!

Haut de page