1

我曾经在每个需要连接数据库的类中扩展 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();
4

3 回答 3

1

从 DB 类扩展应用程序类绝对没有意义。所以 - 计划 B。

于 2013-08-14T19:37:38.137 回答
1

唯一可以接受方法 1 的情况模型Users。但是,由于耦合、多重继承限制等原因,这种方法通常是不好的做法。并且在您的情况下会创建多个数据库连接。

方法2,是两者中更好的方法。它是依赖注入的一种形式。

于 2013-08-14T19:40:39.473 回答
-2

干得好。这比每次都打开一个连接要高效得多,而且您在完成后正确地处理了您的连接。

于 2013-08-14T19:35:36.793 回答