PHP中单一设计模式中私有构造函数的行为

时间:2013-02-05 06:03:51

标签: php design-patterns singleton

考虑这个示例单例类:

class Model_Acl
{
    protected static $_instance;

    private function __construct($a) {
        echo $a;
    }

    public static function getInstance()
    {
        if(!isset(self::$_instance)) {
            self::$_instance = new Model_Acl('hello world');
        }
        return self::$_instance;
    }
}

在同一个类的静态方法中,我能够初始化构造函数为private的类。这是否意味着在尝试在类中实例化对象时,类初始化的范围变为本地?

如果有人能够通过引用访问修饰符来解释PHP实例化的行为,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

您只能通过Model_Acl :: getinstance()初始化它。

但是,它会起作用。

Singleton不被认为是一种好习惯,您应该考虑依赖注入。

http://fabien.potencier.org/article/11/what-is-dependency-injection

有关php Singletons的更多信息

Best practice on PHP singleton classes