在PHP中使用单例模式

3
我想在类的多个方法中使用我创建的DB Singleton。是在每个方法中单独实例化Singleton更合适,还是通过__constructor()实例化并从每个方法中的变量访问它更合适?
谢谢。

如果它是单例模式,则每次都不应该能够创建新实例。 - scotchi
2个回答

3
考虑到它是一个单例模式,结果将是相同的:只会有一个DB对象实例,并且它将始终保持不变。
因此,两种解决方案都可以工作并产生相同的结果;至少,在每次创建类的实例时都使用DB类时-当然,性能差异可能微不足道。
仍然,采用在构造函数中获取单例实例并在其他方法中使用类变量的解决方案具有优势:您的方法不会依赖于这个单例,而只依赖于类变量...
...这意味着如果您将来想要使用依赖注入(例如,为了自动化测试目的而“模拟”您的DB类),它将更加容易(您只需修改__construct方法,而不是类的每个方法)
有关更多信息,您可以查看此博客文章:什么是依赖注入?

非常感谢您提供如此详细的答案 :) - bennn

0

单例模式是否在每次实例化类时都会被使用?还是仅在不经常调用的方法中偶尔使用?如果是前者,最好在构造函数中直接实现;如果是后者,则效率建议在每个方法中按需实例化它(这是假设初始单例创建的开销很大-如果不是,请在构造函数中完成并节省一些麻烦)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接