Poo - singleton class

Contenu du snippet

Une classe générique qui implémente le singleton design pattern en utilisant le Late Static Bindings (Résolution statique à la volée) de PHP 5.3.

Plus d'infos :
- http://fr.php.net/manual/fr/language.oop5.patterns.php
- http://fr.php.net/lsb

Source / Exemple :


<?php
/**

  • Class Singleton is a generic implementation of the singleton design pattern.
*
  • Extending this class allows to make a single instance easily accessible by
  • many other objects, using the {@link Singleton::getInstance()} method.
* abstract class Singleton { /**
  • A protected constructor; prevents direct creation of object.
*
  • @param void
  • @return void
  • /
protected function __construct() { } /**
  • Prevents users to clone the instance.
*
  • @param void
  • @return void
  • @throws LogicException If one tries to clone the instance.
  • /
final public function __clone() { throw new LogicException(sprintf('Cloning an instance of `%s` is not allowed.', get_class($this))); } /**
  • Returns a single instance of a class the static method is called in.
* *
  • @param void
  • @return object Returns a single instance of a class.
  • /
final static public function getInstance() { static $instance = null; return $instance ?: $instance = new static; } } // Example class Foo extends Singleton { public function __toString() { return __CLASS__; } } class Bar extends Singleton { public function __toString() { return __CLASS__; } } $foo = Foo::getInstance(); // prints: Foo echo $foo; $bar = Bar::getInstance(); // prints: Bar echo $bar; // prints: bool(true); var_dump($foo === Foo::getInstance()); // prints: bool(true); var_dump($bar === Bar::getInstance()); // prints: bool(false) var_dump($foo === $bar); // prints (LogicException): Cloning an instance of `Foo` is not allowed. $baz = clone $foo; ?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.