gpt4 book ai didi

php - 通过引用传递 PDO 连接对象?

转载 作者:行者123 更新时间:2023-11-29 02:27:26 28 4
gpt4 key购买 nike

我最近开始重组我用于项目的一些“复制粘贴”数据库类。我在研究登录类时发现了一个有趣的函数。

我的登录类有一个如下所示的函数:

function &db_connect() {
require_once('mysql.php');
$db = new DB();
return $db;
}

有趣的是它返回对 $db 对象的引用而不是实际对象。没关系,但后来我遇到了这个:

function __construct(&$db) {
$this->db = $db;
$this->date = $GLOBALS['date'];
if ($_SESSION['logged']) {
$this->_checkSession();
}
}

代码是这样使用的:

$db = db_connect();
$user = new User($db);

如您所见,实际发生的是我传递了对 DB 实例的引用,而不是实际对象。 3 年前我写这段代码时显然有我的理由,所以现在我想知道,为什么?

我所有的“DB”类和对象都应该通过引用传递吗?简单地按值传递,比如说,一个 PDO 对象,会导致它创建新的连接吗?什么是正确的做法,我应该使用什么?

最佳答案

存储在变量中的值是一个对象引用。按值传递此引用通常是这样做的方式——& 是不必要的,并且在这里没有任何好处。

如果您从构造函数中分配给 $db,这将更改您传入的变量的值:

$a = 1;

function foo(&$p) {
$p = 2;
}

foo($a);
// $a is now 2

我认为在这种情况下使用 & 是错误的,因为如果您更改代码以分配给 $db,它可能会导致意外行为。突然,调用者会看到他们的变量也发生了变化。

关于php - 通过引用传递 PDO 连接对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075453/

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