Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu Napoli

blog technique

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 :
Posted: samedi 14 novembre 2009 19:54 par MadMatt
Classé sous :

Commentaires

KooKiz a dit :

new $classname();

Je crois que c'est cette souplesse que j'aime le plus chez PHP :)

# novembre 16, 2009 09:59
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21

- Onedrive Sync Engine Host : CPU à 100% par Le petit blog de Pierre / Pierre's little blog le 08-06-2014, 22:22

- SharePoint : Bug sur la gestion des permissions et la synchronisation Office par Blog Technique de Romelard Fabrice le 07-10-2014, 11:35

- SharePoint 2007 : La gestion des permissions pour les Workflows par Blog Technique de Romelard Fabrice le 07-08-2014, 11:27

- TypeMock: mock everything! par Fathi Bellahcene le 07-07-2014, 17:06

- Coding is like Read par Aurélien GALTIER le 07-01-2014, 15:30

- Mes vidéos autour des nouveautés VS 2013 par Fathi Bellahcene le 06-30-2014, 20:52

- Recherche un passionné .NET par Tkfé le 06-16-2014, 12:22

- [CodePlex] Projet KISS Workflow Foundation lancé par Blog de Jérémy Jeanson le 06-08-2014, 22:25