大家也许对PHP5面 向对象已经不再陌生,虽然对一些问题的反映虽然加强了很多,但还有很多东西比起java的面向对象弱了很多。有些东西甚至让人费解,就比如下面的PHP5 面向对象代码,b extends a ,实例化b时a的构造函数却没执行?不知道实例化b时,PHP到底是怎么执行的呢?

请看代码:

class a{
    public function __construct(){
        echo "a";
    }
}
class b extends a {
    public function __construct(){
        parent
        echo "b";
    }
    private $x = 100;
    public  function getx(){
        return $this->x;
    }
}
$liu = new b();
echo $liu->getx();

结论:

1 b extends a 实例化b时,如果子类b有自己的构造函数,那么只执行b的构造函数,不会自动执行父类a的构造函数,如果想在实例化子类b的时候也同时执行父类a的构造函数,必须在子类
b的构造函数里加一段代码执行父类的构造函数:parent::__construct();
2 b extends a 实例化b时,如果子类b没有自己的构造函数,那么子类就会自动执行父类a的构造函数。