1

在PHP中,当Object B扩展Object A时,为什么Object的B实例化不会自动触发__construct()in Object A?

奇怪的是,我在对象 B 的构造函数中有两个重复对象 A 的整个构造函数。我犯错了吗?还是滥用继承?

4

4 回答 4

2

如果您不实现新的 __construct 方法,则会自动调用类 A 的构造函数。如果你想在 B 中创建一个新的构造函数并从 A 类中调用旧的构造函数,你必须调用parent::__construct(yourparams,...)

于 2013-02-17T10:30:28.803 回答
2

您不必复制代码。

如果 B 的构造函数没有定义,那么它将采用 A 的构造函数。

如果是,那么您需要将构造调用链接回 A,就像这样。

class A {

    function __construct(...) {
        //do something
    }
}

class B extends A {

    function __construct(...) {
        parent::__construct(...);
        //do something more
    }
}
于 2013-02-17T10:31:57.097 回答
1

如果子类没有显式构造函数,则隐式运行超类构造函数。

如果子类确实有显式构造函数,那么它会覆盖超类中的构造函数,因此您可以在必要时完全更改子类实例化行为。

如果您想向子类添加额外的实例化行为,但仍想保留超类行为,那么您应该执行以下操作:

public function __construct ($arg) {
    parent::__construct ($arg);
    // Additional construction logic goes here
}
于 2013-02-17T10:31:59.657 回答
0

您需要从子类的构造函数调用 parent::__construct(),因为父构造函数没有被隐式调用。

看看这个

http://php.net/manual/en/language.oop5.decon.php

于 2013-02-17T10:35:44.997 回答