我最近开始重组我用于项目的一些“复制粘贴”数据库类。我正在处理登录类并遇到了一个有趣的功能。
我的 Login 类有一个如下所示的函数:
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 年前编写这段代码时有我的理由,所以现在我想知道,为什么?
我所有的“数据库”类和对象都应该通过引用传递吗?简单地通过值传递,比如说,一个 PDO 对象,会导致它创建新的连接吗?什么是正确的做法,我应该使用什么?