CI框架中子类继承父类后为什么还要在构造函数中加载父类构造函数?

class Subclass extends Baseclass {
public function __construct() {
parent::_construct();
}
}

调用父类的构造函数是可选的。但如果没有调用,父类的构造函数里的逻辑是不会被执行的。这样有可能会导致问题。


如:

<?php
// 矩形
class Rectangle {
    public function __construct($length, $width) {
        $this->length = $length;
        $this->width = $width;
    }
}
// 正方形
class Square extends Rectangle {
    public function __construct($width) {
        parent::__construct($width, $width);
    }
}
$s = new Square(10);

在上例中,如果子类不调用父类的构造函数,就会出现问题。因为$length和$width属性将不会被设置。

追问

但是CI里的CI_Controller是父类 而且父类的构造函数也不是有参的 控制器都是继承的CI_Controller
既然继承了不是可以使用父类的方法吗?为什么还必须要构造呢?

追答

如果父类的构造函数为空,或者没有实现,就可以不调用。因为调用了也没有意义。

如果是继承,同名函数是会“覆盖”的。所以如果不显式地调用,是会被“忽略”的。所以如果在继承一函数同时改写这个函数的内容,就要在新写的函数中调用“继承”的函数。

望采纳!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-17

子类中如果使用构造函数就会覆盖父类的构造函数

如果不显示调用父类的构造函数会优先使用子类自己的构造函数

子类的构造函数可能初始化的工作没有父类做的多

第2个回答  2013-07-18
php语言中的面向对象与传统的c++或者java不同,c++和java中的面向对象实例化子类对象的时候父类的构造会自动调用,php中实例化子类对象的时候父类的构造不会执行,除非你手动调用