是否必须从PHP中的子类的构造函数中调用parent :: __构造?

时间:2016-10-25 15:39:23

标签: php class inheritance constructor

是否必须从子类构造函数中的构造函数调用父构造函数?

解释请考虑以下示例:

class Parent{

    function __construct(){
        //something is done here.
    }

}

class Child extends Parent{

    function __construct(){
        parent::__construct();
        //do something here.
    }

}

如上所述这是很正常的。但请考虑类Child的以下构造函数:

function __construct(){
    //Do something here
    parent::__construct();
}

以上代码是否正确?在你打电话给父母的构造函数之前,我们可以做些什么吗?另外,如果我们不像下面那样在孩子的构造函数中调用父母的构造函数是否合法?

class Child extends Parent{

    function __construct(){
        //do something here.
    }

}

我来自JAVA,我所展示的构造函数类型在Java中是不可能的。但这些可以在PHP中完成吗?

2 个答案:

答案 0 :(得分:8)

  

是强制性的吗?

没有

  

以上代码是否正确?

  

在你打电话给父母的构造函数之前,我们可以做些什么吗?

是。你可以按自己喜欢的任何顺序进行。

  

另外如果我们不像下面那样在孩子的构造函数中调用父母的构造函数是否合法?

是。但它也不是隐含。如果子构造函数没有调用父构造函数,那么它将永远不会被调用,因为子构造函数会覆盖父构造函数。如果您的孩子没有构造函数,那么将使用父构造函数

答案 1 :(得分:2)

不,调用父构造函数并不是必须的,但是如果父构造函数具有子类也应该具有的副作用,那么它将是好的。请参阅this phpfiddle,其中一个子类调用父构造函数,但另一个子类不调用。因此,如果未调用父构造函数,它仍然是有效的代码。

此外,如果构造函数未在子类中声明(将覆盖父构造函数),则将使用父类的构造函数。