3

我正在阅读这个 SO 问题:

PHP - 多个不同的数据库依赖注入类

最佳答案。我理解在这里使用接口背后的概念,但我不知道如何使用它。这是最佳答案所说的,对不起,如果我不应该在这里复制它:

您应该首先为所有数据库操作创建一个接口。

interface IDatabase
{
    function connect();
    function query();
    ...
}

然后让不同的驱动类实现这个接口

class MySQLDB implements IDatabase
{
}
class PGSQLDB implements IDatabase
{
}

这样您就可以轻松地使用依赖注入。

class Test
{
   private $db;

   function __construct(IDatabase $db)
   {
        $this->db = $db;
   }
}

您可以将其称为:

$mysqldb = new MySQLDB();
$test = new Test($mysqldb);
or
$pgsqldb = new PGSQLDB();
$test = new Test($pgsqldb);

我不明白的是如何在课堂测试中完成它以及我通过什么来测试。我的连接信息在哪里?我希望有人能帮我完成这个mysql连接或者pdo。

4

1 回答 1

4

您的连接信息将进入 MySQLDB 类,因此您可以拥有如下内容:

class MySQLDB implements IDatabase
{
    private $pdo; // Holds the PDO object for our connection

    // Or you can remove the parameters and hard code them if you want
    public function __construct( $username, $password, $database) {
        $this->pdo = new PDO( '...'); // Here is where you connect to the DB
    }

    public function query( $sql) {
        return $this->pdo->query( $sql); // Or use prepared statments
    }
}

然后你在类之外实例化它:

$db = new MySQLDB( 'user', 'pass', 'db');

并将该$db对象传递给您期望的类之一IDatabase

$obj = new Test( $db); // Dependency Injection, woo hoo!

您还可以考虑让 MySQLDB 类扩展 PDO 类,但这是您的设计选择。

最后,您最好还是坚持使用 PDO 并摆脱所有这些,因为它是一个很棒的抽象层,可以与许多不同的数据库一起使用。

于 2012-08-29T18:04:15.450 回答