PHP中的单例设计模式

时间:2016-06-10 06:49:34

标签: php oop design-patterns

我对单身设计模式有疑问。 当我们为我们的类应用单例时,我们需要将类'构造函数设置为private,因此我们不能正常实例化该类,但我们也在类上下文中实例化它(如果我们需要的对象不存在)。问题是为什么私有构造函数阻止我们在类上下文中实例化类?

2 个答案:

答案 0 :(得分:3)

可见性修饰符用于指定可以信任与此方法或属性进行交互的 。这个想法是每个方法和财产都有特定的目的,应该以特定的方式使用;例如某些方法只应在某些时间调用,某些属性只能设置为某些值。如果每个方法和属性都是public,则任何代码都可以随时与其进行交互,即使它没有“合格”正确执行。为了最大限度地减少由此产生的问题,可见性仅限于一类(protected)或仅一个特定类(private)。

此交互是在static还是对象上下文中,或者甚至是“当前”对象还是其他实例都没有区别。该类有望“合格”与该方法正确交互,因此允许这样做。这可能会让你感到惊讶,但根据这一理念,即使这样也可以正常工作:

class Foo {
    private $bar;

    public static baz() {
        $obj = new Foo;
        $obj->bar = 42;
    }
}

该类没有操纵$this,它正在操纵自身实例的private属性,而这是允许的。所以调用自己的构造函数。

答案 1 :(得分:1)

如果类方法设置为private,则无法在类外部访问它,也不能在子类中访问它,但是您只能使用该特定类访问私有方法。

__ construct()没有什么不同,当你将__construct()设置为private时,你无法在类之外访问它。

现在澄清一点,当我们实例化一个类的对象时,PHP会自动调用它的构造函数..如果设置为private,则会阻止实例化新对象。但是..如果我们从该类实例化一个类的对象,那么PHP会尝试在其上调用__construct()&什么都没有阻止它..

我希望我能为你说清楚。 :)