在PHP中使用单例而不是全局数据库连接有什么好处?我觉得使用单例而不是全局会使代码变得不必要地复杂。
使用Global编写代码
$conn = new PDO(...);
function getSomething()
{
global $conn;
.
.
.
}
使用单例编写代码
class DB_Instance
{
private static $db;
public static function getDBO()
{
if (!self::$db)
self::$db = new PDO(...);
return self::$db;
}
}
function getSomething()
{
$conn = DB_Instance::getDBO();
.
.
.
}
如果有比全局或单例更好的初始化数据库连接的方法,请提及它,并描述它相对于全局或单例的优势。
发布于 2008-09-25 02:44:20
这两种模式实现了相同的净效果,为数据库调用提供了单一访问点。
就具体实现而言,单例有一个小小的优势,那就是在至少有一个其他方法请求连接之前,它不会启动数据库连接。实际上,在我编写的大多数应用程序中,这没有太大区别,但如果您有一些根本不进行任何数据库调用的页面/执行路径,这将是一个潜在的优势,因为这些页面永远不会请求到数据库的连接。
另一个小区别是,全局实现可能会无意中践踏应用程序中的其他变量名。您不太可能会意外地声明另一个全局$db引用,尽管您可能会意外地覆盖它(例如,当您打算编写if($db == null)时,您可以编写if($db = null)。单例对象阻止了这一点。
发布于 2008-09-25 01:03:56
如果您不打算使用持久连接,并且有不使用持久连接的情况,我发现在OO设计中,单例在概念上比全局连接更容易接受。
在真正的OO体系结构中,单例比每次都为对象创建一个新实例更有效。
发布于 2008-09-25 01:06:13
在给定的示例中,我认为没有理由使用单例。根据经验,如果我唯一关心的是允许对象的单个实例,如果语言允许的话,我更喜欢使用全局变量
https://stackoverflow.com/questions/130878
复制相似问题