在php继承中执行__constructor()

Des*_*ang 3 php oop

在PHP中,如果A扩展B,当A被实例化时,B的_constrctor()会自动执行吗?或者我必须调用parent - > _ constructor()?

irc*_*ell 8

PHP查找__construct它可以找到的最顶层(最接近实例化的类)方法.然后它只执行那个.

Class A {
    public function __construct() {
        echo "From A";
    }
}
Class B extends A {
    public function __construct() {
        echo "From B";
    }
}
Class C extends A {}
Class D extends B {}
Class E extends B {
    public function __construct() {
        echo "from E";
    }
}

new A(); // From A
new B(); // From B
new C(); // From A
new D(); // From B
new E(); // From E
Run Code Online (Sandbox Code Playgroud)

然后parent访问列表中的下一个,直到没有更多(此时它将生成错误)...

所以,在类中E,运行parent::__construct()会执行类B的构造函数.

在类中B,running parent::__construct()将执行类A的构造函数.

在类中A,运行parent::__construct()会生成错误,因为没有构造函数...