我有点困惑: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);