66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | // +----------------------------------------------------------------------
 | ||
|  | // | ThinkPHP [ WE CAN DO IT JUST THINK ]
 | ||
|  | // +----------------------------------------------------------------------
 | ||
|  | // | Copyright (c) 2006~2021 http://thinkphp.cn All rights reserved.
 | ||
|  | // +----------------------------------------------------------------------
 | ||
|  | // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 | ||
|  | // +----------------------------------------------------------------------
 | ||
|  | // | Author: liu21st <liu21st@gmail.com>
 | ||
|  | // +----------------------------------------------------------------------
 | ||
|  | declare(strict_types=1); | ||
|  | 
 | ||
|  | namespace think; | ||
|  | 
 | ||
|  | class Facade | ||
|  | { | ||
|  |     /** | ||
|  |      * 始终创建新的对象实例 | ||
|  |      * @var bool | ||
|  |      */ | ||
|  |     protected static $alwaysNewInstance; | ||
|  | 
 | ||
|  |     protected static $instance; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 获取当前Facade对应类名 | ||
|  |      * @access protected | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     protected static function getFacadeClass() | ||
|  |     {} | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 创建Facade实例 | ||
|  |      * @static | ||
|  |      * @access protected | ||
|  |      * @param  bool $newInstance 是否每次创建新的实例 | ||
|  |      * @return object | ||
|  |      */ | ||
|  |     protected static function createFacade(bool $newInstance = false) | ||
|  |     { | ||
|  |         $class = static::getFacadeClass() ?: 'think\DbManager'; | ||
|  | 
 | ||
|  |         if (static::$alwaysNewInstance) { | ||
|  |             $newInstance = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         if ($newInstance) { | ||
|  |             return new $class(); | ||
|  |         } | ||
|  | 
 | ||
|  |         if (!self::$instance) { | ||
|  |             self::$instance = new $class(); | ||
|  |         } | ||
|  | 
 | ||
|  |         return self::$instance; | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     // 调用实际类的方法
 | ||
|  |     public static function __callStatic($method, $params) | ||
|  |     { | ||
|  |         return call_user_func_array([static::createFacade(), $method], $params); | ||
|  |     } | ||
|  | } |