我正在学习PHP并尝试理解Singleton Object但却无法真正理解它实际意味着什么?
如果我创建一个Singleton对象,它是所有客户端的一个对象,还是每个客户端(浏览器会话)都有自己的Singleton对象?
答案 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)
我认为每个客户端都可以拥有该对象的实例,但只有一个。
答案 2 :(得分:0)
单例对象是特定类的单个实例。在每个PHP请求中都会生成这个实例,它甚至不是每个会话,而是每个人在你的系统上发出的请求。
有关更多知识,请查看维基百科页面,以及如何创建模式:http://en.wikipedia.org/wiki/Singleton_pattern
答案 3 :(得分:0)
PHP会话本身不共享数据,因此Singleton只是确保您在Session中使用一个且仅使用一个对象实例,这对于配置,数据库连接,缓存对象来说非常方便。
有几种方法可以实现这一目标。第一个是使用静态方法。虽然它非常简单,但它可以促进紧耦合,并且非常难以进行单元测试,这在项目变大时成为一个主要问题。第二个是简单地将对象保存在某个容器属性中,并将该容器传递给依赖于您的单例实例的所有方法。起初它更难,并且有很多方法可以实现这一点,最常见的是多种依赖注入方法。
答案 4 :(得分:-1)
如果你来自Java土地,那么你可能会觉得单例是整个网络服务器上的单个实例。
在PHP中,每当有新请求到达服务器时,PHP都会运行所有代码并创建新对象和实例,这与Java不同,在PHP中,单例将是请求上下文中的唯一实例,而不是服务器。 / p>
我希望这能回答你的问题:)