我在所有的PHP类文件中都使用了单例模式。
它会不会导致用户在站点上的操作与其他用户的操作冲突?
例如,当应用程序上线时,我们有几个用户同时在网站上,做类似的事情,因此调用相同的PHP类(幕后),因为singleton防止一个类的多个实例,并只返回一个实例。
例如,我有一个叫做Search.php的类,它是一个单例类。这个类处理来自网站的所有搜索查询。如果几个用户同时在网站上执行搜索,他们的操作是否会相互冲突,因为这只是一个可以创建的搜索类的实例。
非常感谢您的宝贵时间。
发布于 2009-01-11 10:11:55
简短的回答是否定的。
每个页面请求都被作为一个唯一的实例来处理,对于每个用户来说,唯一将它们联系在一起的就是会话cookie。试着把PHP想象成一个应用程序,它在你调用脚本时启动,在脚本结束时终止。它不维护任何状态,也不会固有地知道任何其他PHP实例。
单例模式只是一种设计类的方法,您可以在代码中的任何位置(如全局)调用它,而不必关心它是否已被实例化,并且您希望它在内存中持久化。
发布于 2009-01-11 02:18:09
每个请求都是自包含的,并且不与其他请求共享数据(除非您对此使用特定的扩展,如memcache)。因此,在应用程序中使用单例不会影响来自不同用户的不同请求。
您应该关注的是您对单例模式的过度使用。单例是全局的OO版本,如果你不小心,它可能会导致一些奇怪的错误。最好使用不依赖全局设置的作用域操作,并谨慎使用单例。
发布于 2012-02-22 18:04:56
单例模式是争议较大的模式之一。批评人士认为,单例将全局状态引入到应用程序中,并将单例及其消费类紧密耦合在一起。这会导致隐藏的依赖关系和意想不到的副作用,进而导致代码更难测试和维护。
批评人士进一步认为,在PHP这样的无共享架构中使用Singleton是没有意义的,因为在这种架构中,对象在请求中是唯一的。通过在请求开始时使用Builders和Factory patterns来创建collaborator对象图更容易、更清晰。
单例还违反了几个“可靠的”OOP设计原则和德米特定律。不能序列化单例。它们不能是子类型的(在PHP5.3之前),也不会被垃圾回收,因为实例被存储为Singleton的静态属性。
https://stackoverflow.com/questions/432192
复制相似问题