| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- <?php
 
- /**
 
-  * @author mybsdc <[email protected]>
 
-  * @date 2021/10/22
 
-  * @time 17:13
 
-  */
 
- namespace Luolongfei\Libs;
 
- class Base
 
- {
 
-     /**
 
-      * @var array
 
-      */
 
-     private static $instances = [];
 
-     /**
 
-      * 添加单例
 
-      *
 
-      * @param string $className
 
-      * @param bool $overwrite
 
-      *
 
-      * @throws \Exception
 
-      */
 
-     public static function addInstance(string $className, bool $overwrite = false)
 
-     {
 
-         if (isset(self::$instances[$className]) && !$overwrite) {
 
-             throw new \InvalidArgumentException(sprintf(lang('100053'), $className));
 
-         }
 
-         if (!class_exists($className)) {
 
-             throw new \Exception(sprintf(lang('100054'), $className));
 
-         }
 
-         $instance = new $className();
 
-         self::$instances[$className] = $instance;
 
-     }
 
-     /**
 
-      * 获取对象实例
 
-      *
 
-      * @param ...$params
 
-      *
 
-      * @return mixed
 
-      * @throws \Exception
 
-      */
 
-     public static function getInstance(...$params)
 
-     {
 
-         $className = isset($params[1]) && $params[1] === 'IS_MESSAGE_SERVICE' ? $params[0] : static::class;
 
-         if (!isset(self::$instances[$className])) {
 
-             self::addInstance($className);
 
-             // 由于自 php8 开始,is_callable 函数中如果使用类名,将不再适用于非静态方法,非静态方法必须使用对象实例,故只能将 init 从基类的
 
-             // 普通构造函数迁移至此处,既可以实现单次调用非静态初始化方法,又不影响继承
 
-             if (is_callable([self::$instances[$className], 'init'])) {
 
-                 self::$instances[$className]->init(...$params);
 
-             }
 
-         }
 
-         return self::$instances[$className];
 
-     }
 
-     private function __construct()
 
-     {
 
-     }
 
-     private function __clone()
 
-     {
 
-     }
 
- }
 
 
  |