gpt4 book ai didi

php - 将 PHP 对象设置为全局?

转载 作者:可可西里 更新时间:2023-10-31 23:51:44 25 4
gpt4 key购买 nike

我刚开始将我的项目从 mysql 切换到 PDO。在我的项目中,一个新的 PDO 对象或多或少是在程序的开头创建的。

$dbh_pdo = new PDO("mysql:host=$db_url;dbname=$db_database_name", $db_user, $db_password);

现在我想在某些函数和类中使用这个处理程序(这是正确的名称吗?)。有没有办法让对象像变量一样全局化,或者我在尝试一些愚蠢得无法形容的事情,因为我在网上搜索时找不到任何东西......

最佳答案

是的,您可以像任何其他变量一样使对象成为全局对象:

$pdo = new PDO('something');
function foo() {
global $pdo;
$pdo->prepare('...');
}

您可能还想查看 Singleton 模式,它基本上是一种全局的 OO 风格。

话虽如此,我还是建议您不要使用全局变量。它们在调试和测试时可能会很痛苦,因为很难说出谁修改/使用/访问了它,因为一切都可以。它们的使用通常被认为是一种不好的做法。考虑稍微检查一下您的设计。

我不知道你的应用程序是什么样的,但假设你是这样做的:

class TableCreator {
public function createFromId($id) {
global $pdo;
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE id = ?');
$stmt->execute(array($id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
// do stuff
}
}
}

应该那样做:

class TableCreator {
protected $pdo;

public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}

public function createFromId($id) {
$stmt = $this->pdo->prepare('SELECT * FROM mytable WHERE id = ?');
$stmt->execute(array($id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
// do stuff
}
}
}

由于此处的 TableCreator 类需要 PDO 对象才能正常工作,因此在创建实例时将其传递给它是非常有意义的。

关于php - 将 PHP 对象设置为全局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696189/

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