我对单身设计模式有疑问。 当我们为我们的类应用单例时,我们需要将类'构造函数设置为private,因此我们不能正常实例化该类,但我们也在类上下文中实例化它(如果我们需要的对象不存在)。问题是为什么私有构造函数阻止我们在类上下文中实例化类?
答案 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()&什么都没有阻止它..
我希望我能为你说清楚。 :)