我有这样的课程:
classPages.php
class pages {
private $dbh;
function __construct($dbh) {
$this->dbh = $dbh;
}
//...
}
classNews.php
class news {
private $dbh;
function __construct($dbh) {
$this->dbh = $dbh;
}
//...
}
classMod.php
class mod {
private $dbh;
function __construct($dbh) {
$this->dbh = $dbh;
}
//...
}
在索引页面中:
try
{
$dbh = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
require 'classPages.php';
require 'classNews.php';
require 'classMod.php';
$pages = new pages($dbh);
$news = new news($dbh);
$mod = new mod($dbh);
//use above objects where needed
所以我创建了单个PDO对象。然后将其传递给每个类的构造函数。然后我使用这些对象并调用它的成员函数,它使用传递给构造函数的pdo对象来获取和插入数据。
这是正确的方法吗?或者直接/间接发生任何冲突?
答案 0 :(得分:1)
这是正确的方法。您不是每次都创建不同的数据库连接,这是最佳的(不确定新的PDO实例是否仍然这样做,但您至少可以确定)。
在PDO中准备语句时,它会创建一个单独的实例,因此不必担心会发生冲突。唯一可能的问题是,如果您在一个类中更改PDO实例的某些属性,并依赖于在另一个类中使用不同的属性(但这不太可能)。
面向对象编程的目标之一是重用资源,这正是它所做的。