Isi*_*ius 6 php database oop dependency-injection
我花了最后几个小时试图找到一个答案,以"最好",最合乎逻辑的方式写一个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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,重复的代码违反了DRY方法.我知道并且已经看到了许多多个数据库连接的例子,但大多数处理相同的驱动程序并且不提供DI功能.
我还要补充一点,我已经考虑将连接细节放入Database类构造函数中......
$driver = 'mysql';
...
$mysqldb = new Database($driver,$un,$pw,...);
$driver = 'pgsql';
...
$pgsqldb = new Database($driver,$un,$pw,...);
Run Code Online (Sandbox Code Playgroud)
但我不知道这是不是一个好主意,也不知道它与DI有什么关系.
非常感谢!
您应该首先为所有数据库操作创建一个接口.
interface IDatabase
{
function connect();
function query();
...
}
Run Code Online (Sandbox Code Playgroud)
然后有不同的驱动程序类实现此接口
class MySQLDB implements IDatabase
{
}
class PGSQLDB implements IDatabase
{
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以轻松使用依赖注入.
class Test
{
private $db;
function __construct(IDatabase $db)
{
$this->db = $db;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将其命名为:
$mysqldb = new MySQLDB();
$test = new Test($mysqldb);
or
$pgsqldb = new PGSQLDB();
$test = new Test($pgsqldb);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2540 次 |
| 最近记录: |