Classe Singleton en PHP 5.3
PHP 5.3 est enfin sorti en version finale ! Et c'est pas trop tôt.
Le principal défaut qu'il vient corriger, à mes yeux, est le problème du Late Static Binding. Maintenant, il est possible de créer des vraies classes Singleton et d'utiliser ce design pattern grâce à l'héritage.
Voici un exemple de classe Singleton, qui ne fonctionne bien entendu que sous PHP 5.3.
<?php
/**
* Classe Singleton abstraite
*/
abstract class Singleton
{
/**
* Renvoie l'instance Singleton de la classe
*/
public static function getInstance()
{
// Un tableau statique contenant les instances de
// toutes les classes filles
static $_instances = array();
// Récupère le nom de la classe appelée (PHP 5.3, Late Static Binding)
$classname = get_called_class();
// Vérifie si l'instance a déjà été chargée
if (! isset($_instances[$classname])) {
// Si l'instance n'existe pas on la charge
$_instances[$classname] = new $classname();
}
return $_instances[$classname];
}
/**
* Le constructeur peut être redéclaré dans les classes filles
* mais sera en protected pour éviter qu'il soit possible de faire
* $o = new ClasseFille() (on sera obligé d'utiliser getInstance())
*/
protected function __construct() {}
/**
* On déclare cette méchode en final private pour interdire son
* utilisation par des classes filles
*/
final private function __clone() {}
}
Maintenant il est possible de créer des classes qui héritent de cette classe Singleton, et aucune méthode (ni attribut) n'est à redéclarer. Il sera possible d'accéder à l'instance d'une classe fille uniquement par la méthode :
$instance_fille = ClasseFille::getInstance();
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :