1

我目前有一个使用单例的数据库包装器,如下所示:

class Database {
    private static $db;

    public static function getInstance() {
        if(!self::$db) {
            self::$db = new PDO();
        }
        return self::$db;
    }
}

我还有一个 User 类,它有一些我想静态调用的方法,但它们需要一个数据库连接,我正在这样做:

class User {
    private static $db;

    public function __construct() {
        self::$db = Database::getInstance();
    }

    public static function someMethod() {
        self::$db->someQuery();
    }
}

User::someMethod();

我的问题是,如何在不建立多个数据库连接的情况下使用依赖注入而不是单例来完成同样的事情?

4

1 回答 1

1

您只需将 DB 连接传递给构造函数,如下所示:

class User {
    private $db;

    public function __construct($db) {
        if ($db instanceof Database) {
            $this->db = $db;
        } else {
            throw new Exception('Give me a Database object');
        }
    }

    public function someMethod() {
        $this->$db->someQuery();
    }
}
于 2013-01-08T16:21:38.500 回答