2010-05-17 6 views
3

J'ai toujours utilisé une classe Singleton pour un objet de registre en PHP. Comme toutes les classes Singleton Je pense que la principale méthode ressemble à ceci:Quelle est la différence exacte entre la classe statique PHP et la classe singleton

class registry 
{ 
    public static function singleton() 
    { 
     if(!isset(self::$instance)) 
     { 
      self::$instance = new registry(); 
     } 
     return self::$instance; 
    } 

    public function doSomething() 
    { 
     echo 'something'; 
    } 
} 

Alors chaque fois que je besoin de quelque chose de la classe de registre j'utiliser une fonction comme ceci:

registry::singleton()->doSomethine(); 

Maintenant, je ne comprends pas ce que le La différence est entre créer une fonction statique normale. Cela va-t-il créer un nouvel objet si j'utilise simplement une classe statique normale.

class registry 
{ 
    public static function doSomething() 
    { 
     echo 'something'; 
    } 
} 

Maintenant je peux utiliser:

registry::doSomethine(); 

Quelqu'un peut-il me expliquer ce que la fonction est de la classe singleton. Je ne comprends vraiment pas ça.

+0

duplication possible de [Différence entre la classe statique et le modèle singleton?] (Http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern) – Sarfraz

+0

Oups! Désolé, je n'ai pas vu celui-là. –

Répondre

8

Une fonction statique est une fonction qui peut être appelée sans créer d'objet d'une classe.

registry::doSomething() 

A Singleton est un modèle de conception , qui devrait empêcher les utilisateurs de la classe de créer plus d'une instance d'une classe. Ainsi, il n'y a habituellement que une instance d'une classe singleton. Un constructeur de Singleton devrait être déclarée privée et une méthode statique fournissant une seule instance objet:

class Singleton 
{ 
    private Singleton() 
    { 
    } 

    private static var $instance = null; 

    public static getInstance() 
    { 
    if(self::$instance == null) 
     self::$instance = new Singleton(); 
    return self::$instance; 
    } 
} 

Pour plus d'informations, voir http://en.wikipedia.org/wiki/Singleton_pattern

PS: Désolé pour mon mauvais PHP, la syntaxe ne peut pas être 100% correct, mais vous devriez comprendre à peu près ce que je veux dire en termes de POO.

1

Le fait que le Singleton est un modèle de conception qui limite instanciation d'une classe à un seul objet, il est possible de faire des choses qui est un peu plus difficile avec une classe statique:

  • initialisation Lazy
  • Remplacer la mise en œuvre en interne par sous-classage l'usine
  • Gérer la configuration via

Cependant, il y a plusieurs inconvénients à simple tonnes, il est donc préférable en général d'utiliser des modèles tels que Factory car vous obtenez des avantages supplémentaires tels que le découplage.

Questions connexes