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

时间:2013-02-06 08:24:48

标签: php oop syntax

目前,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风格的语法定于弃用,some features of it don't work in the latest 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风格的构造函数已被弃用,那么将在母语中设置构造函数的功能会怎样?

2 个答案:

答案 0 :(得分:2)

对于PHP 4,你可能已经学会了这个here

正如您所知,在PHP 5文档(here)中,声明如果没有使用或继承__construct(),旧语法将作为后备启动:

  

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

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

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

答案 1 :(得分:0)

您现在正在使用什么PHP安装?

如果您安装了PHP 5:

如果要创建新课程,请使用新样式。 如果您已经拥有以前风格的课程,他们仍然可以工作, 但是,当你可以的时候更新它们很好。

如果您安装了PHP 4:

Yopu必须使用以前的风格。如果您稍后更改为PHP 5, 他们也工作。

干杯。