在PHP中,当对象B扩展对象A时,为什么对象的B实例化不会自动触发对象A中的__construct()
?
在Object B的构造函数中,我有两个重复Object A的构造函数,这似乎很奇怪。我犯了错误吗?或滥用继承?
答案 0 :(得分:2)
如果未实现新的__construct方法,则会自动调用A类中的构造函数。如果你想在B中创建一个新的构造函数并且还要从A类调用旧的构造函数,你必须调用parent::__construct(yourparams,...)
答案 1 :(得分:2)
您无需复制代码。
如果没有定义B的构造函数,那么它将采用A的构造函数。
如果是,那么你需要将构造调用链接回A,就像这样。
class A {
function __construct(...) {
//do something
}
}
class B extends A {
function __construct(...) {
parent::__construct(...);
//do something more
}
}
答案 2 :(得分:1)
如果子类没有显式构造函数,则隐式运行超类构造函数。
如果子类确实有一个显式构造函数,那么它将覆盖超类中的构造函数,因此您可以在必要时完全更改子类实例化行为。
如果要向子类添加其他实例化行为但仍希望保留超类行为,则应执行以下操作:
public function __construct ($arg) {
parent::__construct ($arg);
// Additional construction logic goes here
}
答案 3 :(得分:0)
您需要从子类的构造函数中调用parent :: __ construct(),因为不会隐式调用父构造函数。
看看这个