/** * DBオブジェクトを返す * * @access public * @param string $db_key DBキー * @return mixed Ethna_DB:DBオブジェクト null:DSN設定なし Ethna_Error:エラー * @todo この中でnewしないでclass factoryを利用する */ public function getDB($db_key = "") { $null = null; $db_varname = $this->_getDBVarname($db_key); if (Ethna::isError($db_varname)) { return $db_varname; } if (isset($this->db_list[$db_varname]) && $this->db_list[$db_varname] != null) { return $this->db_list[$db_varname]; } $dsn = $this->controller->getDSN($db_key); if ($dsn == "") { // DB接続不要 return $null; } $dsn_persistent = $this->controller->getDSN_persistent($db_key); $class_factory = $this->controller->getClassFactory(); $db_class_name = $class_factory->getObjectName('db'); // BC: Ethna_DB -> Ethna_DB_PEAR if ($db_class_name == 'Ethna_DB') { $db_class_name = 'Ethna_DB_PEAR'; } if (class_exists($db_class_name) === false) { $class_factory->_include($db_class_name); } $this->db_list[$db_varname] = new $db_class_name($this->controller, $dsn, $dsn_persistent); $r = $this->db_list[$db_varname]->connect(); if (Ethna::isError($r)) { $this->db_list[$db_varname] = null; return $r; } register_shutdown_function(array($this, 'shutdownDB')); return $this->db_list[$db_varname]; }