如何创建与依赖注入和接口的连接类?(How do I create a connection cla

2019-06-27 13:43发布

我读这太问题:

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

最多的回答。 我理解其背后这里使用一个接口的概念,但我不知道如何使用它。 这里是顶端回答说什么,对不起,如果我不应该在这里复制:

You should create an interface first for all the DB operations.

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

Then have different driver classes implementing this interface

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

This way you can easily use dependency injection.

    class Test
    {
       private $db;

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

You can call it as:

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

我不明白的是如何完成它的类测试什么,我经过测试。 哪里是我的连接信息去? 我希望有人能帮助我完成这个对于一个MySQL连接或可能PDO。

Answer 1:

您的联系信息会包含在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!

您还可以查看到具有扩展PDO类MySQLdb的类,但是这是你的设计选择。

最后,你可能会更好只是PDO坚持和摆脱这一切,因为它是一个伟大的抽象层,与许多不同的数据库工作。



文章来源: How do I create a connection class with dependency injection and interfaces?