PHP中的Singleton对象

时间:2014-01-17 09:25:35

标签: php design-patterns singleton

我正在学习PHP并尝试理解Singleton Object但却无法真正理解它实际意味着什么?

如果我创建一个Singleton对象,它是所有客户端的一个对象,还是每个客户端(浏览器会话)都有自己的Singleton对象?

5 个答案:

答案 0 :(得分:3)

Singleton是设计模式,基本上意味着:

  • 确保任何时候只能有一个班级的实例。
  • 从中的任何位置提供对该单个实例的全局访问权限 你的申请。

PHP中的单例示例:

class Singleton
{
    protected static $instance = null;
    protected function __construct()
    {

     }

    public static function getInstance()
    {
        if (!isset(static::$instance)) {
            static::$instance = new static;
        }
        return static::$instance;
    }
}

惊喜你不需要Singleton在PHP中,这就是为什么?

gordon博客链接为什么它在PHP中无用 http://blog.gordon-oheim.biz/2011-01-17-Why-Singletons-have-no-use-in-PHP/

答案 1 :(得分:0)

我认为每个客户端都可以拥有该对象的实例,但只有一个。

check this

答案 2 :(得分:0)

单例对象是特定类的单个实例。在每个PHP请求中都会生成这个实例,它甚至不是每个会话,而是每个人在你的系统上发出的请求。

有关更多知识,请查看维基百科页面,以及如何创建模式:http://en.wikipedia.org/wiki/Singleton_pattern

答案 3 :(得分:0)

PHP会话本身不共享数据,因此Singleton只是确保您在Session中使用一个且仅使用一个对象实例,这对于配置,数据库连接,缓存对象来说非常方便。

有几种方法可以实现这一目标。第一个是使用静态方法。虽然它非常简单,但它可以促进紧耦合,并且非常难以进行单元测试,这在项目变大时成为一个主要问题。第二个是简单地将对象保存在某个容器属性中,并将该容器传递给依赖于您的单例实例的所有方法。起初它更难,并且有很多方法可以实现这一点,最常见的是多种依赖注入方法。

答案 4 :(得分:-1)

如果你来自Java土地,那么你可能会觉得单例是整个网络服务器上的单个实例。

在PHP中,每当有新请求到达服务器时,PHP都会运行所有代码并创建新对象和实例,这与Java不同,在PHP中,单例将是请求上下文中的唯一实例,而不是服务器。 / p>

我希望这能回答你的问题:)