00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00019 abstract class Singleton
00020 {
00021 private static $instances = array();
00022
00023 protected function __construct() {}
00024
00026 final public static function getInstance(
00027 $class, $args = null
00028 )
00029 {
00030
00031 if (2 < func_num_args()) {
00032 $args = func_get_args();
00033 array_shift($args);
00034 }
00035
00036 if (!isset(self::$instances[$class])) {
00037 $object =
00038 $args
00039 ? new $class($args)
00040 : new $class();
00041
00042 Assert::isTrue(
00043 $object instanceof Singleton,
00044 "Class '{$class}' is something not a Singleton's child"
00045 );
00046
00047 return self::$instances[$class] = $object;
00048 } else
00049 return self::$instances[$class];
00050 }
00051
00052 final public static function getAllInstances()
00053 {
00054 return self::$instances;
00055 }
00056
00057 final private function __clone() {}
00058 final private function __sleep() {}
00059 }
00060 ?>