【发布时间】:2012-12-12 18:48:30
【问题描述】:
我正在为 CodeIgniter (link to project) 开发一个子查询库,它通过返回您可以使用的数据库对象而不是普通的 $this->db 对象来工作。
最初,我每次都在创建新的数据库对象:
$this->CI =& get_instance();
$db = $this->CI->load->database('', true);
但我随后意识到(或者更确切地说是有人向我指出)这每次都会建立一个新的数据库连接!所以我决定尝试clone 对象而不是创建新对象。
我将代码更新为如下所示 (link to full code):
class Subquery{
var $CI, $db;
function __construct(){
$this->CI =& get_instance();
$this->db = $this->CI->db; // Default database connection
}
function start_subquery(){
$newDatabase = clone $this->db;
// some more code
return $newDatabase;
}
}
我对此进行了测试,它似乎可以工作,但我不确定这是否能解决问题。使用clone 是建立一个新的数据库连接,还是在内部使用引用并且只保留一个连接?
【问题讨论】:
-
除非在
__clone()中实现->db,否则它将使用相同的数据库连接资源afaik。通过设置和检索一些用户定义的变量来轻松测试(不会下载 CI 来测试:P) -
@Wrikken:酷!我看过了,似乎没有
__clone方法。那挺好的。我只想要一个连接:-)
标签: php codeigniter