gpt4 book ai didi

php - 类内 PDO 合并

转载 作者:可可西里 更新时间:2023-11-01 12:38:16 25 4
gpt4 key购买 nike

我在理解这个问题时遇到了一些问题。我想开始重写一些旧的 MySQL 函数代码 PDO。它的设置方式是包含此行的外部文件(除其他外):

// db.php file   

$DB = new dbConnect(SERVER,DB,USER,PASSWORD,3306);

function my_autoloader($class)
{
require_once ($_SERVER['DOCUMENT_ROOT']."/includes/".'class.' . $class . '.php' );
}

spl_autoload_register('my_autoloader');

这将创建到我的数据库的连接。这包含在我页面的最顶部,也会加载我所有的类(class)。现在,如果我想使用 PDO 创建一个新连接,我会执行以下操作:

$conn = new PDO('mysql:host='.SERVER.';dbname='.DB.';charset=utf8',USER, PASSWORD);

但是,我不能将这行代码放在单独的文件中并从类中调用 PDO,如下所示:

require_once 'db.php';
class info
{

protected $ID;

public function __construct($id)
{
$this->ID = $id; //
}

public function getName()
{
$query = "SELECT * FROM job";
$q = $conn->query($query);
$data = $q->fetch(PDO::FETCH_ASSOC);
//do something with $data

}
}

这是否意味着我必须像下面这样通过聚合在构造函数中建立连接?

require_once 'db.php';
class info
{
protected $ID;
protected $pdo;

public function __construct($id)
{
$this->ID = $id; //
$this->pdo = new PDO('mysql:host='.SERVER.';dbname='.DB.';charset=utf8',USER, PASSWORD);
}

public function getName()
{
$query = "SELECT * FROM job";
$q = $this->pdo->query($query);
$data = $q->fetch(PDO::FETCH_ASSOC);
// do something
}
}

或者还有其他我不知道的方法。尝试重写我所有的类来合并它似乎很乏味。

最佳答案

与其在构造函​​数中创建数据库连接,不如让它成为一个依赖项:

public function __construct(PDO $db, $id)
{
$this->pdo = $db;
$this->ID = $id;
}

要使用它,您需要:

// $db = new PDO('mysql:host='.SERVER.';dbname='.DB.';charset=utf8',USER, PASSWORD);
$info = new info($db, '123');
echo $info->getName();

这种方法的主要优点是您不再在类中存储任何配置。此外,您还可以传递任何实现 PDO 的内容,从而使用模拟数据库启用单元测试。

关于php - 类内 PDO 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com