oop php构造函数访问修饰符,使用哪一个?

oop php构造函数访问修饰符,使用哪一个?,php,constructor,visibility,Php,Constructor,Visibility,我刚刚开始尝试OO PHP,但有一个基本原则我并不完全理解,也没有找到太多关于它的信息 创建\uu construct()方法时,如果它是该类的特定构造函数,为什么希望它是public? 您希望何时调用类外的构造函数 对我来说,使用受保护的构造函数似乎是一种很好的做法,对吗 我知道这是基本的面向对象的东西,但我没有直接找到任何关于它的信息,特别是对于构造函数的信息。每当你创建一个类的新实例时,构造函数就会被调用。如果构造函数不是公共的,则没有其他代码可以创建该类的实例 因此,如果要创建类的实例,

我刚刚开始尝试OO PHP,但有一个基本原则我并不完全理解,也没有找到太多关于它的信息

创建
\uu construct()
方法时,如果它是该类的特定构造函数,为什么希望它是
public
? 您希望何时调用类外的构造函数

对我来说,使用受保护的构造函数似乎是一种很好的做法,对吗


我知道这是基本的面向对象的东西,但我没有直接找到任何关于它的信息,特别是对于构造函数的信息。

每当你创建一个类的新实例时,构造函数就会被调用。如果构造函数不是公共的,则没有其他代码可以创建该类的实例

因此,如果要创建类的实例,请将构造函数公开

构造函数始终只是它定义的类的一部分,我不理解你所说的“当它特别是该类的构造函数时”是什么意思


澄清:


调用构造函数的唯一方法是使用
newclass()
。没有其他方法可以调用它
\uu构造是一个函数,无法显式调用magic方法。

当您执行
新建MyClass()
时,即当您实例化该类时,
\uu构造(不是“\uu构造”)方法被调用。构造函数必须是公共的,除非您只想从类本身实例化类。如果是后者,则至少需要另一个
public static
方法,您可以调用该方法来实例化类本身,否则无法创建它的任何实例。

编辑了输入错误。所以使用公共构造函数更为常见?@fishbaitfood:是的,否则就无法真正创建类的实例。正如deceze在他的回答中解释的那样,你需要其他方法来为你做到这一点。你没读过吗?;)“构造函数必须是公共的[…],否则无法创建它的任何实例。”。由于创建类的实例是非常常见的(否则,当您无法创建对象时,OOP有什么意义?),所以将构造函数公开是很常见的。正如我所说,我把事情复杂化了。:)我认为可以调用类之外的所有公共方法,甚至是_construct()一个…:)@鱼饵食品:当然可以,即使是
\u构造()
一个。没有人阻止你一次又一次地调用它,因为构造函数在创建新对象后会自动执行。这就是我的意思。所以我真的不明白什么时候你会在类外调用构造函数。也许我把事情复杂化了…你不能。调用构造函数的唯一方法是使用
newclass()
。没有其他方法可以调用它<代码>\u构造
是一个函数,无法显式调用魔术方法。不过,您可以使用静态方法调用私有构造函数。