【问题标题】:Where I should store PDO connection?我应该在哪里存储 PDO 连接?
【发布时间】:2013-12-15 05:10:22
【问题描述】:

我有点困惑:单例不好,全局最差。那么在不同类之间共享对象(例如 PDO 连接)的最佳做法是什么?

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

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

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

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;');

【问题讨论】:

  • 我只想说要务实。如果需要,请使用单例或静态注册表。你不会是attacked by ferocious velociraptors
  • 本月早些时候over here 就该主题进行了一些很好的讨论。可能值得你一读
  • 谢谢菲尔,我只是想进化 :) 我要放弃单例,因为我正在重写一些代码,所以我想以最好的方式做。

标签: php


【解决方案1】:

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

class Something {
    /** @var \PDO */
    var $pdo;

    public function __construct(\PDO $pdo) {
        $this->pdo = $pdo;
    }
}

$class = new \Something($mypdo);

【讨论】:

  • 问题(与这些类型的问题一样)是将 PDO 实例保持在范围内
  • 这是一个 DI,我在我的应用程序中使用它时遇到了一些问题,我需要一个不同的解决方案,或者我需要从头开始重写它。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多