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);
    }
 
}