Design Pattern: le singleton
By Geoffrey on Friday 13 February 2004, 11:30 - Coding - Permalink
Toujours poussé par cette envie (besoin ?) d'améliorer mes compétences de développeur, vlatipa que je commence à m'interresser à la POO un peu plus en profondeur. En effet, depuis mes débuts en POO, j'ai toujours utilisée celle-ci pour créer des classes qui ne sont rien de plus que des collections de fonctions regroupées par thème (une classe mysql, une classe sessions, une classe cookies, etc). Ce qui n'est, obviously, pas une bonne utilisation de la POO (excusez l'anglicisme, mais j'adore ce mot). J'ai donc pris mon courage à trois mains, et je suis allé errer sur les forums de SitePoint pour en apprendre un peu plus sur cet art moitié voudou qu'est la POO. Je vous livre en exclusivité ici même les premiers résultats de cette démarche: une petite explication de l'utilité du singleton.
Le singleton est une technique qui permet de s'assurer de l'unicité de l'instance d'une classe dans toute l'application. Bien. Mais le singleton permet bien plus que cela. Il facilite grandement la communication inter-objets. Voyons tout de suite comment mettre en place le singleton.
class DatabaseAccess {
function &getInstance() {
static $i;
if (!isset($i)) {
$i = new DatabaseAccess();
}
return $i;
}
}
$db1 = & DatabaseAccess::getInstance();
$db2 = & DatabaseAccess::getInstance();
On définit donc une méthode qui sert à récuérer l'instance de la classe. On store cette instance dans une variable statique, qui sera donc la même à chaque appel de la méthode. Les variables $db1 et $db2 font donc référence au même objet. L'avantage, c'est que la méthode getInstance est disponible depuis n'importe où dans l'application. Ainsi, pour récupérer l'instance de l'objet DatabaseAccess dans une autre classe, il suffit d'utiliser DatabaseAccess::getInstance().
class foo {
function foo() {
$this->dba = DatabaseAccess::getInstance();
}
}
$foo->dba est une référence vers le même objet que $db1 et $db2. Adieu les passage par référence en argument :)
Pour plus d'informations sur le singleton, et sur les Design Patterns en général, je ne peux que vous conseiller l'excellent site phppatterns d'Harry Fueck.
Comments
Harry Fueck...
Il a quand même du bol le gars, à une lettre près :o)