首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP单例类是否以某种方式在请求之间共享?

问PHP单例类是否以某种方式在请求之间共享?
EN

Stack Overflow用户
提问于 2009-01-11 02:13:45
回答 4查看 9.1K关注 0票数 15

我在所有的PHP类文件中都使用了单例模式。

它会不会导致用户在站点上的操作与其他用户的操作冲突?

例如,当应用程序上线时,我们有几个用户同时在网站上,做类似的事情,因此调用相同的PHP类(幕后),因为singleton防止一个类的多个实例,并只返回一个实例。

例如,我有一个叫做Search.php的类,它是一个单例类。这个类处理来自网站的所有搜索查询。如果几个用户同时在网站上执行搜索,他们的操作是否会相互冲突,因为这只是一个可以创建的搜索类的实例。

非常感谢您的宝贵时间。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-11 10:11:55

简短的回答是否定的。

每个页面请求都被作为一个唯一的实例来处理,对于每个用户来说,唯一将它们联系在一起的就是会话cookie。试着把PHP想象成一个应用程序,它在你调用脚本时启动,在脚本结束时终止。它不维护任何状态,也不会固有地知道任何其他PHP实例。

单例模式只是一种设计类的方法,您可以在代码中的任何位置(如全局)调用它,而不必关心它是否已被实例化,并且您希望它在内存中持久化。

票数 32
EN

Stack Overflow用户

发布于 2009-01-11 02:18:09

每个请求都是自包含的,并且不与其他请求共享数据(除非您对此使用特定的扩展,如memcache)。因此,在应用程序中使用单例不会影响来自不同用户的不同请求。

您应该关注的是您对单例模式的过度使用。单例是全局的OO版本,如果你不小心,它可能会导致一些奇怪的错误。最好使用不依赖全局设置的作用域操作,并谨慎使用单例。

票数 28
EN

Stack Overflow用户

发布于 2012-02-22 18:04:56

单例模式是争议较大的模式之一。批评人士认为,单例将全局状态引入到应用程序中,并将单例及其消费类紧密耦合在一起。这会导致隐藏的依赖关系和意想不到的副作用,进而导致代码更难测试和维护。

批评人士进一步认为,在PHP这样的无共享架构中使用Singleton是没有意义的,因为在这种架构中,对象在请求中是唯一的。通过在请求开始时使用Builders和Factory patterns来创建collaborator对象图更容易、更清晰。

单例还违反了几个“可靠的”OOP设计原则和德米特定律。不能序列化单例。它们不能是子类型的(在PHP5.3之前),也不会被垃圾回收,因为实例被存储为Singleton的静态属性。

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

https://stackoverflow.com/questions/432192

复制
相关文章

相似问题

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