| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | <?php/** *  db_factory.class.php 数据库工厂类 * * @copyright			(C) 2005-2015 PHPCMS * @license				http://www.phpcms.cn/license/ * @lastmodify			2015-02-10 */final class db_factory {		/**	 * 当前数据库工厂类静态实例	 */	private static $db_factory;		/**	 * 数据库配置列表	 */	protected $db_config = array();		/**	 * 数据库操作实例化列表	 */	protected $db_list = array();		/**	 * 构造函数	 */	public function __construct() {	}		/**	 * 返回当前终级类对象的实例	 * @param $db_config 数据库配置	 * @return object	 */	public static function get_instance($db_config = '') {		if($db_config == '') {			$db_config = pc_base::load_config('database');		}		if(db_factory::$db_factory == '') {			db_factory::$db_factory = new db_factory();		}		if($db_config != '' && $db_config != db_factory::$db_factory->db_config) db_factory::$db_factory->db_config = array_merge($db_config, db_factory::$db_factory->db_config);		return db_factory::$db_factory;	}		/**	 * 获取数据库操作实例	 * @param $db_name 数据库配置名称	 */	public function get_database($db_name) {		if(!isset($this->db_list[$db_name]) || !is_object($this->db_list[$db_name])) {			$this->db_list[$db_name] = $this->connect($db_name);		}		return $this->db_list[$db_name];	}		/**	 *  加载数据库驱动	 * @param $db_name 	数据库配置名称	 * @return object	 */	public function connect($db_name) {		$object = null;		switch($this->db_config[$db_name]['type']) {			case 'mysql' :				pc_base::load_sys_class('mysql', '', 0);				$object = new mysql();				break;			case 'mysqli' :				$object = pc_base::load_sys_class('db_mysqli');				break;			case 'access' :				$object = pc_base::load_sys_class('db_access');				break;			default :				pc_base::load_sys_class('mysql', '', 0);				$object = new mysql();		}		$object->open($this->db_config[$db_name]);		return $object;	}	/**	 * 关闭数据库连接	 * @return void	 */	protected function close() {		foreach($this->db_list as $db) {			$db->close();		}	}		/**	 * 析构函数	 */	public function __destruct() {		$this->close();	}}?>
 |