PHP类构造函数继承性问题
本帖最后由 keweisen 于 2016-12-31 12:25 编辑PHP类的构造函数格式为__construct(){},(比较旧的PHP版本中构造函数与类函数同名)默认为可继承,当然也可以设置为private私有的,即private function __construct() {
}当设置为private时,该类不可以被继承(不可以被扩展)。构造函数的私有性在单例模式中得到了充分的应用,这个会在接下来的文章中提到。当子类自身有构造函数时,子类不会继承父类的构造函数,若想继承,则需要在子类中定义:public function __construct() {
parent::__construct();
}此处举一个我在学CI框架时遇到的一个问题,我定义了一个Test类,并在Test的构造函数中 加载了 来自父类的方法 $this->load->helper(‘url’);于是就报错了。Message: Undefined property: Test::$loadFatal error: Call to a member function helper() on null inD:\XAMP\htdocs\CI\application\controllers\Test.php on line 4
原因是定义了子类的构造函数,则不会继承父类的构造函数,正确的写法应该如下,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();欢迎补充和讨论。
【转自】Ke阿猫
好文,支持~
页:
[1]