单身模式的澄清

时间:2011-04-15 21:09:48

标签: php design-patterns

我正在为PHP应用程序编写一些实用程序类,其中很多都是单例。发现自己一遍又一遍地重写相同的代码,并决定创建一个抽象基类Singleton并将其子类化。只是想确保我已经正确完成了这个!

abstract class Singleton
{
    private static $instance = NULL;

    public static final function getInstance()
    {
        if(self::$instance == NULL)
            self::$instance = instantiate();

        return self::$instance;
    }

    protected abstract static function instantiate();
}

class LogHelper extends Singleton
{
    protected static final function instantiate()
    {
        return new LogHelper();
    }
}

现在,如果我已正确完成此操作,我可以从代码库中的任何位置调用LogHelper $LOGGER = LogHelper::getInstance(),并且每次都获得对同一实例的引用,是吗?

2 个答案:

答案 0 :(得分:2)

您可能需要将getInstance()方法定义为static,以便可以在不必实例化类的情况下访问它们。然后,你将使用它:

$objSingleton = LogHelper::getInstance();

而且,你可能想要定义一个私有构造函数:

private function __construct() { }

答案 1 :(得分:1)

虽然单身人士起初看起来是理想的解决方案,但事实并非如此。了解注册管理机构和家属注入;当你开始进行单元测试时,它们会让你的生活更轻松。