PHP中不推荐使用派生类构造函数名称?

dot*_*hen 6 php oop syntax

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

class A
{
    public function A()
    {
        echo "I'm a constructor for class A!";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

class A
{
    public function __construct()
    {
        echo "I'm a constructor for class A!";
    }
}
Run Code Online (Sandbox Code Playgroud)

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
{
}
Run Code Online (Sandbox Code Playgroud)

由于Java风格的构造函数已被弃用,因此将在父语言中设置构造函数的功能是什么?

St0*_*0rM 2

您可能在这里学到了PHP 4 的内容。

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

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

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

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