PHP中的单例设计模式

PHP中的单例设计模式,php,oop,design-patterns,Php,Oop,Design Patterns,我有一个关于单例设计模式的问题。 当我们为我们的类应用singleton时,我们需要将类的构造函数设置为私有,这样我们就不能正常地实例化该类,但我们也在类上下文中实例化它(如果我们需要的对象不存在)。问题是为什么私有构造函数不阻止我们在类上下文中实例化类?如果一个类方法被设置为私有,则您不能在类之外访问它,也不能在子类中访问它,但您只能在该特定类中访问私有方法 __construct()也一样,当您将_construct()设置为private时,您无法在类之外访问它 现在再澄清一点,当我们实例

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

如果一个类方法被设置为私有,则您不能在类之外访问它,也不能在子类中访问它,但您只能在该特定类中访问私有方法

__construct()也一样,当您将_construct()设置为private时,您无法在类之外访问它

现在再澄清一点,当我们实例化一个类的对象时,PHP会自动调用它的构造函数。。如果设置为private,将阻止实例化新对象。但是如果我们从该类中的with实例化一个类的对象,PHP会尝试调用该类上的_construct()&没有任何东西阻止它


我希望我能给你讲清楚。:)

可见性修饰符用于指定可以信任谁与此方法或属性交互。每个方法和属性都有特定的目的,应该以特定的方式使用;e、 某些方法只能在特定时间调用,某些属性只能设置为特定值。如果每个方法和属性都是
公共的
,那么任何代码都可以在任何时候与之交互,即使它没有“资格”正确地进行交互。为了尽量减少由此产生的问题,可视性可以仅限于一系列类(
protected
)或仅限于一个特定类(
private

无论这种交互是在
静态
还是对象上下文中,甚至是“当前”对象还是它的另一个实例中,都没有区别。该类需要“被限定”才能正确地与该方法交互,因此允许这样做。这可能会让你感到惊讶,但根据这一理念,即使这样也很好:

class Foo {
    private $bar;

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

该类不是在操纵
$this
,而是在操纵自身实例的
私有属性,这是允许的。调用自己的构造函数也是如此。

当方法或属性的可见性设置为private时,谁可以访问它?它不一定是私人的,也不一定是受保护的作品,这取决于设计和用途。。