我曾经在每个需要连接数据库的类中扩展Db连接类。我认为这是最常见的方式。但是,通过这种方式,您可以在扩展db连接类的每个类实例中打开和关闭新连接。最近,我认为我可以创建一个pdo对象并将其传递给类的构造函数。因此,每个需要访问数据库的类实例都使用相同的连接。它有效,但我不确定这是否是一种有效的方法。此外,我有一个名为closeCon的函数,我在脚本的末尾调用,以便通过null和unset关闭连接。我也想知道你对此的看法。提前谢谢你:)
方法1:新类扩展了dbConnection类。
class Db {
public $pdo;
public function __construct($usr, $pwd, $db) {
$this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
}
}
class Users extends Db{
public function __construct(){
parent::__construct($usr, $pwd, $db);
}
}
方法2:通过将PDO dbConnection变量传递给新类的构造函数来连接到db。
class Db {
public $pdo;
public function __construct($usr, $pwd, $db) {
$this->pdo = new PDO("mysql:host=localhost;dbname=".$db.";charset=utf8", $usr, $pwd);
}
public function closeCon(){
$this->pdo = null;
unset($this->pdo);
}
}
class Users {
protected $pdo;
public function __construct($con){
$this->pdo = $con;
}
}
$db = new Db($usr, $pwd, $db);
$posts = new Users($db->pdo);
$db->closeCon();
答案 0 :(得分:1)
从DB类扩展应用程序类绝对没有意义。所以 - 计划B。
答案 1 :(得分:1)
方法1 可能的唯一情况是Users
是模型。但是,由于耦合,多重继承限制等原因,这种方法通常是不好的做法。在您的情况下,会创建多个数据库连接。
方法2,是两者中更好的方法。它是dependency injection的一种形式。
答案 2 :(得分:-2)
干得好。这比每次打开连接更有效,并且在完成后正确处理连接。