12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- <?php
- namespace support\lib;
- /**
- * 单例容器 ,如果不需要 DI容器的可以用次单例模式
- * Class Instance
- * @package core\lib
- */
- abstract class Instance
- {
- /**
- * 单例容器
- * @var array
- */
- private static $_instances = [];
- /**
- * @var null
- */
- protected static $_class = null;
- /**
- * 单例模式
- * 对象会存入单例容器,随着进程而保持
- * @param bool $loadConfig
- * @return static
- */
- final public static function instance($loadConfig = false)
- {
- self::$_class = get_called_class();
- if (!isset(self::$_instances[self::$_class]) or !self::$_instances[self::$_class] instanceof Instance) {
- self::$_instances[self::$_class] = new self::$_class($loadConfig);
- }
- return self::$_instances[self::$_class];
- }
- /**
- * 工厂模式
- * 对象不会存入单例容器,随着方法体执行完毕而被PHP GC主动回收
- * @param bool $config
- * @return static
- */
- final public static function factory($config = false)
- {
- $class = get_called_class();
- return new $class($config);
- }
- /**
- * 单例容器全清
- * 清除后交给PHP GC进行回收
- */
- final public function instanceClean()
- {
- foreach (self::$_instances as $key => $instance) {
- unset($key);
- }
- }
- }
|