我正在研究CodeIgniter的子查询库(link to project),它通过返回可以使用的数据库对象而不是正常的$this->db
对象来工作。克隆CodeIgniter的数据库对象
本来,我是在制造新的数据库每次对象:
$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'中实现,否则它将使用相同的db连接资源afaik。通过设置和检索某些用户定义的变量(不打算下载CI来测试:P),可以轻松进行测试 – Wrikken
@Wrikken:酷!我看过,它似乎没有'__clone'方法。那很好。我只想要一个连接:-) –