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

- Etendre le Team Web Access de TFS 2012 – Step 0 par Philippe Didiergeorges Aka Philess le il y a 7 heures et 20 minutes

- Simuler facilement l’envoi de mail par Blog de Jérémy Jeanson le 05-22-2013, 12:52

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le 05-20-2013, 14:50

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 12:59

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:09

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:03

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 08:27

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21