【问题标题】:oop php constructor access modifier, which one to use?oop php 构造函数访问修饰符,使用哪一个?
【发布时间】:2023-03-12 12:11:01
【问题描述】:

我刚刚开始尝试使用 OO PHP,但是有一个基本原理我不是很了解,也没有找到太多关于它的信息。

当创建一个__construct() 方法时,为什么你希望它是public,而它专门是该类的构造函数? 你什么时候想在类外调用构造函数?

对我来说,使用受保护的构造函数似乎是个好习惯,对吧?

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

【问题讨论】:

    标签: php constructor visibility


    【解决方案1】:

    __construct(不是“__constructor”)方法是在您执行new MyClass() 时调用的方法,即在您实例化类时。构造函数需要public,除非您只想从自身内部实例化类。如果是后者,您至少需要一个可以调用的其他 public static 方法,该类将在其中实例化自身,否则您无法创建它的任何实例。

    【讨论】:

    • 编辑错字。所以更常见的是使用公共构造函数?
    • @fishbaitfood:是的,否则您无法真正创建该类的实例。正如 deceze 在他的回答中解释的那样,您需要其他方法来为您做到这一点。你没读过吗? ;) “构造函数必须是公共的 [...] 否则你无法创建它的任何实例。”。由于创建类的实例很常见(否则,当您无法创建对象时,OOP 的意义何在?),将构造函数设为 public 是很常见的
    • 就像我说的,我把事情复杂化了。 :) 我认为你可以调用类外的所有公共方法,甚至是 __construct() 一个...... :)
    • @fishbaitfood:当然可以,即使是__construct() 也可以。没有人能阻止你一次又一次地调用它。
    【解决方案2】:

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

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

    构造函数始终只是定义它的类的一部分,我不明白您的意思 “当它专门为该类的构造函数时”


    澄清一下:

    调用构造函数的唯一方法是使用new Class()。没有其他方法可以调用它。 __constructmagic method 并且无法显式调用魔法方法。

    【讨论】:

    • 因为构造函数在创建新对象后自动执行。我正是这个意思。所以我真的不明白你什么时候会在类外调用构造函数。也许我把事情复杂化了..
    • 你不能。调用构造函数的唯一方法是使用new Class()。没有办法以任何其他方式调用它。 __constructmagic method 并且无法显式调用魔术方法。
    • 你可以使用静态方法来调用私有构造函数。
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 2012-11-12
    • 2014-01-27
    • 2014-04-01
    • 2017-01-12
    • 2012-05-09
    • 2015-10-14
    相关资源
    最近更新 更多