在PHP中,如果A扩展B,当A被实例化时,B的_constrctor()会自动执行吗?或者我必须调用parent - > _ constructor()?
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()会生成错误,因为没有构造函数...