在php继承中执行__constructor()

时间:2011-01-07 20:53:33

标签: php oop

在php中,如果A扩展了B,那么当实例化A时,B的_constrctor()会自动执行吗?或者我必须打电话给parent-> _constructor()?

4 个答案:

答案 0 :(得分: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

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

因此,在类E中,运行parent::__construct()将执行类B的构造函数。

在课程B中,运行parent::__construct()将执行类A的构造函数。

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

答案 1 :(得分:1)

答案是你必须打电话。

一个简单的测试:

class A {
      public function __construct() {
           echo 'A';
      }
}

class B extends A {
      public function __construct() {
           echo 'B';
      }
}

$ab = new B();

应该告诉你所有你需要知道的事情。

答案 2 :(得分:0)

如果A有一个,你需要从A的构造函数中调用“parent :: __ construct()”。否则你不需要。

答案 3 :(得分:0)

class A {
    function __construct() {
        echo 5;
    }
}
class B_no_Constructor extends A {

}
class B_with_Constructor extends A {
    function __construct(){}
}
//try one
//new B_no_Constructor; //outputs 5
//new B_with_Constructor; //outputs nothing