在这种情况下,单例实例是否有意义?

时间:2017-03-06 20:44:37

标签: php oop singleton

我知道这是程序员中一个备受争议的话题,我已经阅读了很多关于单例模式的缺点和优点。

我仍然想问一下单身人士模式。

我正在创建一个小型的PHP框架,而且我在我的框架中处理Cookie时遇到了困难。

前期:

框架为每个模块提供工厂函数,因此从外部不清楚实例是否是单例。

示例:

$db     = Framework::DB(); // always a new instance
$cookie = Framework::Cookie(); // singleton (maybe?)

我的观点:

提供一个单独的cookie实例,可用于改变cookie(set,delete,get):

class Cookie {
     public function set($name, $value) {

     }
}

我的理由是,Cookie是一种全局状态,您无法创建新的Cookie环境 - 它始终由浏览器提供。 对我来说,实例化一个新的cookie类实例毫无意义。

但也许我错过了什么。

基本上我想知道是否有更好的解决方案(不使用单例模式),或者这是单身实际上有意义的情况之一。

1 个答案:

答案 0 :(得分:2)

Singleton基本上意味着你只能创建一个类的实例,我个人没有看到硬编码到一个类的重点,因为一般来说一个类是创建的东西,所以你可以创建多个对象。

对于您的数据库示例,对于大多数仅处理1个数据库的网站,它应该没问题。但是如果将来要使用相同的API连接到外部数据库呢?哦,你不能,因为我实现了单一界面。

现在让我们来谈谈你的cookie示例,每个网站都能够存储多个cookie。为什么要创建一个单例?设计该类,以便$cookie2 = new Cookie('name')引用另一个cookie。是的,它可以用1个类完成,一个单例,每次你需要解析一个名字来确定放入它的cookie。

单例设计模式很少有用,至少在PHP中是这样。大多数人使用容器来存储引用类的单个实例(基本上是单例)的变量。但是,对于另一个容器,可以更改该容器,可能是在使用相同API时引用不同数据库和不同cookie的测试环境。