Как создать класс соединения с инъекциями зависимостей и интерфейсами?

Я читал этот вопрос:

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.

Ваша информация о подключении будет идти в классе 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 и избавиться от всего этого, так как это отличный слой абстракции, который работает со многими различными базами данных.