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

私の質問は、複数のDB接続を作成せずに、シングルトンの代わりに依存性注入を使用して同じことをどのように達成するかということです。

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 に答える