====== Singleton ====== Une classe héritable pour faire des Singletons. Nécessite PHP >= 5.3. abstract class Singleton { // this must be in every inherited singleton! protected static $_instances = array() ; /** * @exception Cannot duplicate a singleton */ final public function __clone() { throw new Exception('Cannot duplicate a singleton.'); } final private function __sleep() { /* restless class */ } /** * Get the instance * @return A object of a class */ final public static function getInstance() { $class = get_called_class(); // php 5.3.0 if( ! isset(static::$_instances[$class]) ) { static::$_instances[$class] = new $class; } return static::$_instances[$class]; } /** * Permet de faire des appels statique de méthode qui ne le sont pas, pour un objet héritant de ce Singleton. * * Ca ne fonctionne pas !! * Ca appelle bien la méthode, mais quand celle-ci appele d'autres méthodes ça plante... * * @param $func * @param $args * @return unknown_type */ public static function __callStatic($func, $args) { $class = static::Instance(); return call_user_func_array(array($class, '__'.$func), $args); } }