为什么我输入parent :: __ construct?

时间:2015-07-16 15:08:03

标签: php codeigniter oop

每次我去申报一个扩展课程,

Class cookies extends Food{
    public function __construct()
    {
        parent::__construct();
    }
}

为什么我使用parent::__construct()

这是继承吗?只是扩展类不继承它的属性?

2 个答案:

答案 0 :(得分:6)

如果这是您的子类构造函数的唯一内容,那么您根本不需要定义子构造函数,它只会运行父构造函数。

如果您使用构造函数创建子类,那么该子构造函数将运行而不是父类构造函数(即使它只是一个空体);因此,如果您需要运行父类的构造函数以及,则需要使用parent::__construct()

显式调用它

答案 1 :(得分:1)

真的很简单。如果您计划您孩子的班级有__construct,那么您需要决定,"我是否也希望我父母的__construct继承?" 如果是,那么您需要使用parent::__construct()

考虑这个例子:

class Actions {

    function __construct() {
        echo "I can do even more actions and.. ";
    }

    function jump() {
        return "hop hop";
    }

    function eat() {
        return "munch munch";
    }
}

class Humans extends Actions {

    function __construct() { //this will overwrite the parents construct
        echo "I am a human and ...";
    }


    function talk() {
        return "I can talk";
    }

}

class Dogs extends Actions {

    function __construct() { //this will NOT overwrite the parents construct
        parent::__construct();
        echo "I am a dog and ...";
    }


    function bark() {
        return "I can bark";
    }

}

如果我们运行Human()函数,我们将获得以下内容:

$human = new Humans();
var_dump($human->talk());

/*
RESULT:

I am a human and ...
string 'I can talk' (length=10)
*/

但是,如果我们运行Dogs()函数,我们将获得以下内容:

$dogs = new Dogs();
var_dump($dogs->bark());

/*
RESULT:
I can do even more actions and.. I am a dog and ...
string 'I can bark' (length=10)
*/