大家也许对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的构造函数。
转载于:https://blog.51cto.com/xiaopzi/975036