如果我有以下课程:
class foo {
function __construct() {
// Some code
}
}
然后使用继承来创建:
class bar extends foo {
// Some code
}
当我实例化类'bar'时,它是否会自动从'foo'执行__construct方法,还是需要做其他事情才能让该方法执行?
答案 0 :(得分:5)
来自manual:
注意:父构造函数不是 如果子类隐式调用 定义了一个构造函数。
虽然文档没有明确说明,但这句话的反转也是正确的,即如果子类没有定义构造函数,则隐式调用父构造函数。因此,在您的示例中,实例化bar
会自动调用foo::__construct
。
答案 1 :(得分:2)
它可以工作,父类的构造函数将被继承。 如果在instaciated类中定义新的构造函数,它将覆盖父类的构造函数。如果您仍想执行父构造函数,则应包括
parent::__construct();
在isntanciated class
的构造中答案 2 :(得分:1)
__construct
将结转,是的。
当您想要向该函数添加内容时会出现问题,即parent
类派上用场时。
class bar extends foo {
$this->doSomethingElse();
parent::__construct();
}
答案 3 :(得分:0)
当然,当你扩展一个类时,子类会继承父类中的所有public和protected方法。