我在读这个SO问题:
PHP-多个不同数据库依赖注入类
最佳答案。我理解在这里使用接口背后的概念,但我不知道如何使用它。以下是最重要的答案,如果我不应该在这里复制它,对不起:
您应该首先为所有DB操作创建一个接口。
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。
您的连接信息将在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,去掉所有这些,因为它是一个很好的抽象层,可以与许多不同的数据库一起工作。