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