Codeigniter,为什么我需要CI_Controller的构造?(下面的代码)

时间:2017-02-08 19:57:40

标签: php codeigniter constructor parent

为什么我需要使用parent :: __ construct();构造函数,它需要什么?

// CONTROLLER

class users_ctrl extends CI_Controller {

    function __construct() {
        parent::__construct(); //Why do I need  to include it?
        $this->load->model('select_model');
}
    public function index()
    {
        $data['user_list'] = $this->select_model->get_all_users();
        $this->load->view('show_users', $data);
    }
}

// MODEL

class select_model extends CI_Model{
   function __construct() {
        parent::__construct();
}

  function get_all_users()
    {
        $query = $this->db->get('students');
        return $query->result();
    }
}

2 个答案:

答案 0 :(得分:0)

在给定的示例中,您将调用基本控制器类加载的load类。如果没有父的构造函数,则必须自己加载它的实例。

对于您的模型,您必须手动加载db对象。

删除它,您应该得到类似called to undefined propery $class::load

的内容

答案 1 :(得分:0)

抛开CodeIgniter,它确实是面向对象编程的基本原理。

如果你创建一个扩展另一个的类,并在子类中声明一个新的构造函数,那么父构造函数将永远不会运行 - 因为你已经覆盖它,并且因为CodeIgniter基本控制器(很可能)很多幕后的事情,如果你不运行父构造函数,你的控制器很可能不会被注入CI的容器中。