数据库连接的更好做法是什么


What's the better practice to database connect

我想知道使用 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

您应该尽可能

晚地打开连接并尽快关闭它。如果驱动程序正在使用连接池,它将重新使用连接。如果您的代码由于某种原因而失败,或者从未到达插入数据的部分,则不会留下泄漏的连接。

根据经验,晚开,早关,剩下的交给司机