2016-06-10 47 views
2

我有一个关于单身人士设计模式的问题。 当我们为我们的类应用单例时,我们需要将类的构造函数设置为私有的,以便我们不能正常地实例化类,但是我们也在类上下文中实例化它(如果我们需要的对象不存在)。问题是为什么私人构造函数阻止我们在类上下文中实例化类?单身人士设计模式在PHP

+5

当方法或属性的可见性设置为_private_时,谁可以访问它?它不需要_私人_一定,_protected_也可以,这取决于设计和目的。 – dbf

回答

3

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

这种交互是在static还是对象上下文中,或者它是“当前”对象还是它的另一个实例都没有区别。预计该类将被“限定”与该方法正确交互,因此可以这样做。这可能会根据这一理念令你感到惊讶,但即使这样工作得很好:

class Foo { 
    private $bar; 

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

类是没有操纵$this,它的操纵自身的实例的private财产,这是允许的。所以调用它自己的构造函数。

1

如果某个类的方法设置为private,则不能在子类外部访问它,也不能在子类中访问它,但只能在该特定类中使用私有方法。 __construct()没有什么不同,当你将__construct()设置为private时,你不能在类之外访问__construct()。当我们实例化一个类的对象时,PHP会自动调用它的构造函数..如果设置为private,则会阻止实例化一个新对象。但是..如果我们实例化一个类的对象 - 在那个类中,PHP试图调用__construct()&没有什么阻止它在那里..

我希望我能够清楚您。 :)

+0

谢谢你的回答:) –