【发布时间】:2023-03-30 16:45:01
【问题描述】:
我最近开始重组一些用于项目的“复制粘贴”数据库类。我正在处理登录类并遇到了一个有趣的功能。
我的登录类有一个如下所示的函数:
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 对象,会导致它创建新的连接吗?什么是正确的做法,我应该使用什么?
【问题讨论】:
-
@tereško 我的问题并非特定于 PDO(即使我在名称中提到它,因为数据库连接对多个实例比其他类型更敏感)。更重要的是看看我将来在传递实例关键对象时应该使用什么正确的做法。
-
@tereško 你能否在不让我播放 youtube 视频的情况下详细说明一下?
标签: php mysql variables pdo pass-by-reference