在PHP中使用单例

时间:2009-12-01 22:32:12

标签: php oop class singleton

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

感谢。

2 个答案:

答案 0 :(得分:3)

考虑到它是一个单例,结果将是相同的:只有一个数据库对象的实例,它将始终是相同的。

因此,两种解决方案都可以工作,并产生相同的结果;至少,如果每次创建一个类的实例时都使用了DB类 - 当然,性能差异可能会微不足道。


仍然,使用在构造函数中获取单例实例并在其他方法中使用类变量的解决方案有一个优点:您的方法不依赖于此单例,而只依赖于类变量...

...这意味着Dependency Injection会更容易(您只需要修改__construct方法,而不是修改类中的每个方法)如果你希望有一天能够使用它 - 例如,为了自动化测试而“模拟”你的数据库类。

有关更多信息,您可以查看此博文:What is Dependency Injection?

答案 1 :(得分:0)

单例是否可以在每次实例化类时使用它?或者它只是偶尔用在并不总是被调用的方法上?如果是前者,那么在构造函数中执行它可能会更直接;如果是后者,那么效率会建议只在每个方法中按需实例化它(这假设初始单例创建的开销是很重要的 - 如果不是,只需在构造函数中执行它并省去一些麻烦)。