db_factory.class.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * db_factory.class.php 数据库工厂类
  4. *
  5. * @copyright (C) 2005-2015 PHPCMS
  6. * @license http://www.phpcms.cn/license/
  7. * @lastmodify 2015-02-10
  8. */
  9. final class db_factory {
  10. /**
  11. * 当前数据库工厂类静态实例
  12. */
  13. private static $db_factory;
  14. /**
  15. * 数据库配置列表
  16. */
  17. protected $db_config = array();
  18. /**
  19. * 数据库操作实例化列表
  20. */
  21. protected $db_list = array();
  22. /**
  23. * 构造函数
  24. */
  25. public function __construct() {
  26. }
  27. /**
  28. * 返回当前终级类对象的实例
  29. * @param $db_config 数据库配置
  30. * @return object
  31. */
  32. public static function get_instance($db_config = '') {
  33. if($db_config == '') {
  34. $db_config = pc_base::load_config('database');
  35. }
  36. if(db_factory::$db_factory == '') {
  37. db_factory::$db_factory = new db_factory();
  38. }
  39. 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);
  40. return db_factory::$db_factory;
  41. }
  42. /**
  43. * 获取数据库操作实例
  44. * @param $db_name 数据库配置名称
  45. */
  46. public function get_database($db_name) {
  47. if(!isset($this->db_list[$db_name]) || !is_object($this->db_list[$db_name])) {
  48. $this->db_list[$db_name] = $this->connect($db_name);
  49. }
  50. return $this->db_list[$db_name];
  51. }
  52. /**
  53. * 加载数据库驱动
  54. * @param $db_name 数据库配置名称
  55. * @return object
  56. */
  57. public function connect($db_name) {
  58. $object = null;
  59. switch($this->db_config[$db_name]['type']) {
  60. case 'mysql' :
  61. pc_base::load_sys_class('mysql', '', 0);
  62. $object = new mysql();
  63. break;
  64. case 'mysqli' :
  65. $object = pc_base::load_sys_class('db_mysqli');
  66. break;
  67. case 'access' :
  68. $object = pc_base::load_sys_class('db_access');
  69. break;
  70. default :
  71. pc_base::load_sys_class('mysql', '', 0);
  72. $object = new mysql();
  73. }
  74. $object->open($this->db_config[$db_name]);
  75. return $object;
  76. }
  77. /**
  78. * 关闭数据库连接
  79. * @return void
  80. */
  81. protected function close() {
  82. foreach($this->db_list as $db) {
  83. $db->close();
  84. }
  85. }
  86. /**
  87. * 析构函数
  88. */
  89. public function __destruct() {
  90. $this->close();
  91. }
  92. }
  93. ?>