【问题标题】:PHP Inheritance QuestionPHP继承问题
【发布时间】:2010-08-24 00:33:33
【问题描述】:
如果我有以下课程:
class foo {
function __construct() {
// Some code
}
}
然后使用继承来创建:
class bar extends foo {
// Some code
}
当我实例化类 'bar' 时,它会自动执行来自 'foo' 的 __construct 方法,还是我需要做其他事情才能执行该方法?
【问题讨论】:
标签:
php
oop
inheritance
class
【解决方案1】:
来自manual:
注意:父构造函数不是
如果子类隐式调用
定义了一个构造函数。
虽然文档没有明确说明,但反之亦然,即如果子类未定义构造函数,则隐式调用父构造函数。因此,在您的示例中,实例化 bar 将自动调用 foo::__construct。
【解决方案2】:
它有效,父类的构造函数将被继承。
如果你在 instaciated 类中定义了一个新的构造函数,它将覆盖父类的构造函数。如果您仍想执行父构造函数,则应包括
parent::__construct();
在 thje istanciated 类的构造函数中
【解决方案3】:
__construct 会继续使用,是的。
当您想向该函数添加一些东西时,问题就出现了,这时parent 类就派上用场了。
class bar extends foo {
$this->doSomethingElse();
parent::__construct();
}
【解决方案4】:
当然,当您扩展一个类时,子类会继承父类的所有公共和受保护方法。