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

- Evénement monfial Global Azure Bootcamp (10 000 participants) Venez !! par Blog de Vincent THAVONEKHAM, Objet Direct le il y a 18 heures et 38 minutes

- Mon Blog déplacé vers une version anglaise... www.thavo.com par Blog de Vincent THAVONEKHAM, Objet Direct le il y a 18 heures et 42 minutes

- Localisation et globalisation ne sont pas des options par Blog de Jérémy Jeanson le 01-17-2015, 11:47

- [Clean Code] les commentaires… par Fathi Bellahcene le 01-10-2015, 17:17

- Mise à jour de Test Professional 2013 par Blog de Jérémy Jeanson le 01-10-2015, 11:32

- [Dynamics CRM] Ajouter un bouton pour déclencher un workflow ou un script (dialogue) par Christine Dubois le 01-09-2015, 14:03

- RDV aux #SharePoint Days 2015 à Casablanca les 28 et 29 janvier ! par Le blog de Patrick [MVP Office 365] le 01-06-2015, 08:41

- TFS Online, vous allez aimer vos projets par Blog de Jérémy Jeanson le 01-03-2015, 11:19

- Bon code 2015 ! par Blog de Jérémy Jeanson le 01-02-2015, 19:01

- [Dynamics CRM] Créer un contact à partir d’une signature email par Christine Dubois le 12-30-2014, 14:37