我想知道使用PHPOO进行数据库连接的更好方法是什么。
如果我在 __ construct 上设置连接并关闭 __ destruct 上的连接,我是否会进行太多无用的连接?
例如..我的类名为" sqlClass"它有一些方法..
所以..让我们实例化这个班级......
$myObj = new sqlClass(); // mysql_connect and mysql_close executed here...
$myObj->insertData(); // mysql_connect and mysql_close executed here again...
我应该将连接分开吗?
答案 0 :(得分:1)
1次连接
class sqlClass {
private $_connection = null;
public function __construct() {
$this->_connection = new SomeConnection(array('param1', 'param2', 'param3'));
}
public function query($query) {
return $this->_connection->query();
}
}
2增加更多自由
class sqlClass {
private $_connection = null;
public function __construct($params) {
$this->_connection = new SomeConnection($params);
}
public function query($query) {
return $this->_connection->query();
}
}
3.1要么添加懒惰
class sqlClass {
private $_connection = null;
private $_params = null;
public function __construct($params) {
$this->_params = $params
}
public function query($query) {
if ($this->_connection === null)
$this->_connection = new SomeConnection($this->_params);
return $this->_connection->query($query);
}
}
3.2要么添加依赖注入
class sqlClass {
private $_connection = null;
public function __construct(SomeConnection $connection) {
$this->_connection = $connection;
}
public function query($query) {
return $this->_connection->query($query);
}
}
4将延迟移至连接类并使用依赖注入
class LazyConnection extends SomeConnection{
private $_params = null;
private $_inited = false;
public function __construct($params){
$this->_params = $params;
}
public function query($query){
if (!$this->_inited){
parent::__construct($this->_params);
$this->_inited = true;
}
parent::query($query);
}
}
使用OOP,您无需手动关闭连接:http://php.net/manual/en/features.gc.php
答案 1 :(得分:0)
您应该尽可能晚地打开连接并尽快关闭它。 如果您的驱动程序正在使用连接池,它将重新使用该连接。 如果您的代码由于某种原因而失败,或者从未到达您要插入数据的部分,则不会留下泄漏的连接。
根据经验,打开它们很晚,提前关闭它们并让司机完成其余的工作