PHP - внедренный класс нескольких разных баз данных

Я потратил последние несколько часов, пытаясь найти ответ на «лучший», наиболее логичный и т. Д. Способ написать класс базы данных php для одновременного подключения к одной базе данных postgresql и одному mysql. дб. Кроме того, я хотел бы принять дизайн внедрения зависимостей, но я новичок в этой концепции.

Пока что я придумал ...

class Database {

    public function PgSqlConnect() {
            /* Connect to database */
        $host = 'localhost';
        $dbname = '---';
        $user = '---';
        $pass = '---';
        $timeout = 5;   /* seconds */

        try {
            $pgsql_dbh = new PDO("pgsql:host=$host; dbname=$dbname", $user, $pass); 
            $pgsql_dbh->setAttribute( PDO::ATTR_TIMEOUT, $timeout ); 
            $pgsql_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

            return $pgsql_dbh;
        } catch( PDOException $e ) {
            echo 'Unable to connect to database: ' . $e->getMessage();
        }
    }


    public function MySqlConnect() {
            /* Connect to database */
        $host = 'localhost';
        $dbname = '---';
        $user = '---';
        $pass = '---';
        $timeout = 5;   /* seconds */

        try {
            $mysql_dbh = new PDO("mysql:host=$host; dbname=$dbname", $user, $pass); 
            $mysql_dbh->setAttribute( PDO::ATTR_TIMEOUT, $timeout ); 
            $mysql_dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

            return $mysql_dbh;
        } catch( PDOException $e ) {
            echo 'Unable to connect to database: ' . $e->getMessage();
        }
    }

}

Очевидно, что дублированный код нарушает подход DRY. Я знаю и видел много примеров нескольких подключений к базе данных, но большинство из них имеют дело с одним и тем же драйвером и не предоставляют возможности DI.

Я также должен добавить, что я рассматривал возможность размещения деталей соединения в конструкторе класса базы данных как ...

$driver = 'mysql';
...
$mysqldb = new Database($driver,$un,$pw,...);

$driver = 'pgsql';
...
$pgsqldb = new Database($driver,$un,$pw,...);

, но я не знаю, действительно ли это хорошая идея и насколько хорошо это будет работать с DI.

Большое спасибо!

6
задан Isius 2 November 2011 в 20:11
поделиться