6

目前,PHP 支持构造函数的两种命名约定。PHP 4 支持 Java 风格的构造函数:

class A
{
    public function A()
    {
        echo "I'm a constructor for class A!";
    }
}

PHP 5 支持 Java 风格的构造函数和“魔术方法”语法:

class A
{
    public function __construct()
    {
        echo "I'm a constructor for class A!";
    }
}

Java 风格的语法将被弃用,并且它的某些功能在最新的 PHP 中不起作用。但是,它有一个有趣的属性,我不知道与“魔术方法”语法类似。如果派生类foobar没有显式构造函数,则foobar基类的方法成为foobar构造函数:

class A
{
    public function A()
    {
        echo "I'm a constructor for class A!";
    }

    public function B()
    {
        echo "I'm a constructor for class B!";
    }
}

class B extends A
{
}

由于 Java 风格的构造函数已被弃用,那么 set-the-constructor-in-the-parent 语言特性会变成什么?

4

2 回答 2

2

对于 PHP 4,您可能在这里学到了这一点。

如您所知,在 PHP 5 文档(此处)中指出,如果没有使用或继承 __construct(),则旧语法将作为后备使用:

为了向后兼容,如果 PHP 5 找不到给定类的 __construct() 函数,并且该类没有从父类继承一个,它将按类的名称搜索旧式构造函数。实际上,这意味着唯一会出现兼容性问题的情况是,如果该类有一个名为 __construct() 的方法,该方法用于不同的语义。

所以旧语法应该仍然有效,如 PHP 5.4.11。即使可以预见,目前也没有明确的弃用计划。

无论如何,当(以及是否)它们将被删除时,此功能也将被删除,因为无法使用 __construct() 语法重现它。

于 2013-02-06T13:52:33.353 回答
0

你现在在做什么 PHP 安装?

如果您有 PHP 5 安装:

如果您正在制作新课程,请使用新样式。如果您已经有以前样式的类,它们仍然可以工作,但是,如果可以的话,最好更新它们。

如果您有 PHP 4 安装:

Yopu 必须使用以前的样式。如果您稍后更改为 PHP 5,它们也可以工作。

干杯。

于 2013-02-06T17:32:07.410 回答