在 PHP 中扩展单例
2022-08-30 15:29:19
我在一个Web应用程序框架中工作,其中一部分由许多服务组成,所有这些都是作为单例实现的。它们都扩展了一个服务类,其中实现了单例行为,如下所示:
class Service {
protected static $instance;
public function Service() {
if (isset(self::$instance)) {
throw new Exception('Please use Service::getInstance.');
}
}
public static function &getInstance() {
if (empty(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
}
现在,如果我有一个名为FileService的类,实现如下:
class FileService extends Service {
// Lots of neat stuff in here
}
...调用 FileService::getInstance() 不会生成 FileService 实例,就像我想要的那样,而是一个服务实例。我假设这里的问题是服务构造函数中使用的“self”关键字。
有没有其他方法可以在这里实现我想要的?单例代码只有几行,但我仍然希望尽可能避免任何代码冗余。