PHP类的构造函数格式为__construct(){},(比较旧的PHP版本中构造函数与类函数同名)默认为可继承,当然也可以设置为private私有的,即
private function __construct() {
}
当设置为private时,该类不可以被继承(不可以被扩展)。构造函数的私有性在单例模式中得到了充分的应用,这个会在接下来的文章中提到。
当子类自身有构造函数时,子类不会继承父类的构造函数,若想继承,则需要在子类中定义:
public function __construct() {
parent::__construct();
}
此处举一个我在学CI框架时遇到的一个问题,我定义了一个Test类,并在Test的构造函数中 加载了 来自父类的方法 $this->load->helper(‘url’);于是就报错了。
Message: Undefined property: Test::$load
Fatal error: Call to a member function helper() on null inD:\XAMP\htdocs\CI\application\controllers\Test.phpon line4
原因是定义了子类的构造函数,则不会继承父类的构造函数,正确的写法应该如下,
class Test extends CI_Controller {
public function __construct() {
parent::__construct();//继承父类的构造函数
$this->load->helper('url');
}
public function hello() {
echo site_url('Test/hello');
}
}
若子类自身没有构造函数,则会自动调用父类的构造函数,
class Pet {
function __construct($pet_name) {
echo $pet_name;
}
}
class Cat extends Pet {
}
$ca = new Pet('K');//输出K
$cat = new Cat('Ke阿猫');//输出Ke阿猫
总结,在PHP中,当子类集成了父类,若子类没有构造函数,则继承父类的构造函数,若子类有自身的构造函数,则不继承,若需继承,则需在自身构造函数内引用
parent::__construct();
微信订阅号
如果觉得《php 继承类构造函数 PHP类构造函数继承性问题》对你有帮助,请点赞、收藏,并留下你的观点哦!