我应该在哪里存储PDO连接


Where I should store PDO connection?

我有点困惑:singleton很糟糕,globals最糟糕。那么,在不同的类之间共享对象(例如PDO连接)的最佳实践是什么呢?

我希望HTML模板类、ACL类等使用相同的数据库连接。

我知道新的趋势是使用DI,但使相同的PDO连接全球化的最佳实践是什么?也许使用注册表?还是将其设置为静态var?

编辑:这个解决方案怎么样?

class Connection {
    protected static $instance;
    static function init('PDO $connection) {
        if(isset(self::$instance ))
            throw new 'Exception('A connection to a database has already been set.');
        self::$instance = $connection;
    }
    static function exec($query) {
        return self::$instance->exec($query);
    }
}
Connection::init(new PDO('blahblah'));
Connection::exec('SELECT * FROM users;');

最佳实践是创建PDO实例,然后将其注入到类中。这样,您就不必在课堂上弄清楚如何连接到数据库。

class Something {
    /** @var 'PDO */
    var $pdo;
    public function __construct('PDO $pdo) {
        $this->pdo = $pdo;
    }
}
$class = new 'Something($mypdo);