首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数据库连接是全局的还是单例的?

数据库连接是全局的还是单例的?
EN

Stack Overflow用户
提问于 2008-09-25 00:56:28
回答 5查看 56.6K关注 0票数 81

在PHP中使用单例而不是全局数据库连接有什么好处?我觉得使用单例而不是全局会使代码变得不必要地复杂。

使用Global编写代码

代码语言:javascript
复制
$conn = new PDO(...);

function getSomething()
{
    global $conn;
    .
    .
    .
}

使用单例编写代码

代码语言:javascript
复制
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();
    .
    .
    .
}

如果有比全局或单例更好的初始化数据库连接的方法,请提及它,并描述它相对于全局或单例的优势。

EN

回答 5

Stack Overflow用户

发布于 2008-09-25 02:44:20

这两种模式实现了相同的净效果,为数据库调用提供了单一访问点。

就具体实现而言,单例有一个小小的优势,那就是在至少有一个其他方法请求连接之前,它不会启动数据库连接。实际上,在我编写的大多数应用程序中,这没有太大区别,但如果您有一些根本不进行任何数据库调用的页面/执行路径,这将是一个潜在的优势,因为这些页面永远不会请求到数据库的连接。

另一个小区别是,全局实现可能会无意中践踏应用程序中的其他变量名。您不太可能会意外地声明另一个全局$db引用,尽管您可能会意外地覆盖它(例如,当您打算编写if($db == null)时,您可以编写if($db = null)。单例对象阻止了这一点。

票数 3
EN

Stack Overflow用户

发布于 2008-09-25 01:03:56

如果您不打算使用持久连接,并且有不使用持久连接的情况,我发现在OO设计中,单例在概念上比全局连接更容易接受。

在真正的OO体系结构中,单例比每次都为对象创建一个新实例更有效。

票数 2
EN

Stack Overflow用户

发布于 2008-09-25 01:06:13

在给定的示例中,我认为没有理由使用单例。根据经验,如果我唯一关心的是允许对象的单个实例,如果语言允许的话,我更喜欢使用全局变量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/130878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档