我想知道使用 PHPOO 建立数据库连接的更好方法是什么。
如果我在__construct上设置连接并在__destruct上关闭连接,我会不会建立太多无用的连接?
例如。。我的类叫做"sqlClass",它有一些方法。
所以.. 让我们实例化这个类...
$myObj = new sqlClass(); // mysql_connect and mysql_close executed here...
$myObj->insertData(); // mysql_connect and mysql_close executed here again...
我应该将连接设置为分开吗?
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
您应该尽可能
晚地打开连接并尽快关闭它。如果驱动程序正在使用连接池,它将重新使用连接。如果您的代码由于某种原因而失败,或者从未到达插入数据的部分,则不会留下泄漏的连接。
根据经验,晚开,早关,剩下的交给司机