【发布时间】:2011-07-09 16:31:19
【问题描述】:
我有一个 PHP 数据库类,它连接到 MySQL 并包装了所有 PDO 代码,我用它来查询数据库。基本上在页面控制器中我创建了一个新对象:
$db = new Database($dbConfig);
然后我可以使用准备好的查询从数据库中获取数据:
$params = array('username' => $username);
$result = $db->preparedSelect('select password, salt from users where username = :username', $params);
它将 PDO 语句结果复制到一个新的 assoc 数组中,并仅将数据库结果返回到调用页面。我用一个简单的 foreach 遍历它们,如下所示:
foreach ($result as $key => $val)
{
$password = $val['password'];
$salt = $val['salt'];
}
好吧,假设我希望另一个类使用我的 $db 对象,以便它可以通过某些方法访问数据库。目前其他类看起来像这样:
class General
{
// Database object
private $db;
public function __construct($db)
{
$this->db = $db;
}
}
效果很好,但我只是想知道构造函数是否应该如下所示:
public function __construct(&$db)
{
$this->db = $db;
}
这应该意味着我通过引用传递它而不是将对象复制到另一个类中。我不想要类中的 $db 对象的副本,我希望它使用现有的数据库对象,这样我就不会有它的多个副本漂浮在内存中。
在 PHP5 中将其作为 $db 或 &$db 传递有什么区别?通过阅读,PHP5 默认通过引用传递对象,而其他人说它现在以 Java 方式进行,有些人说使用 & 会产生硬链接。我糊涂了。最好的方法是什么?
非常感谢!
【问题讨论】:
标签: php database oop pass-by-reference