首页 >后端开发 >php教程 >PHP 数据库访问真的需要单例吗?

PHP 数据库访问真的需要单例吗?

Patricia Arquette
Patricia Arquette原创
2024-12-22 22:40:11283浏览

Are Singletons Really Necessary for PHP Database Access?

单例:PHP 数据库访问中的神话

您正在质疑单例用于 PHP 数据库访问的必要性,考虑以下简化的单例类:

class Database {
    private static $db;

    private function __construct(){}

    static function get() {
        if(!isset(self::$db))
            self::$db = new PDO(...);

        return self::$db;
    }
}

你想知道为什么这还不够,而不是更多具有 singleton() 方法的复杂单例类。

揭穿 PHP 中单例的有用性

在 PHP 中,单例几乎没有优势:

  • 内存保护:单例旨在减少内存使用通过共享共享内存中的实例。然而,在 PHP 中,对象驻留在私有请求内存中,使得此目的无关紧要。
  • 强制单例:概念单例可能不需要语言机制来强制执行。创建第二个实例时只考虑单例会造成不良影响。

单例的缺点

  • 全局耦合:单例引入全局范围的依赖关系,使测试变得复杂可维护性。
  • 依赖注入替代方案:当多个类需要单个实例时,依赖注入提供了更干净、更可测试的解决方案。

Erich Gamma 的怀疑

甚至是单例的创建者之一模式,Erich Gamma,现在质疑它的实用性:

  • “我赞成放弃 Singleton。它的使用几乎总是一种设计味道”

何时可能适用单例

尽管如此对于 PHP 中单例的普遍怀疑,请考虑以下场景:

  • 全局访问点:为同一请求中的实例创建全局访问点可能是合理的,但可能会引入耦合和维护挑战。
  • 消除第二个实例:仅在存在时才实现单例迫切需要防止创建额外的实例。

其他资源

  • [在 PHP 中测试单例:为什么这样棘手](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
  • [单例数据库类的缺点](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
  • [决策图单例](link_to_Singleton_Decision_Diagram)

以上是PHP 数据库访问真的需要单例吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn