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