0

为什么将 CodeIgniter 从 v1.7 升级到 v2.1 后出现此错误?

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Site::$load

Filename: libraries/Website.php

Line Number: 25

Fatal error: Call to a member function library() on a non-object in C:\xampp\htdocs\travel\application\libraries\Website.php on line 25

图书馆申请/图书馆/网站

class Website extends CI_Controller {

    public static $current_city;

    public function __construct() {

        $this->load->library('language'); // line 25
        $this->language->loadLanguage();
        $this->load_main_lang_file();
        $this->load_visitor_geographical_data();
        $this->load->library('bread_crumb');
   }
}
4

1 回答 1

2

你忘了调用类__construct的方法CI_Controller

public function __construct()
{
    // Call CI_Controller construct method first.
    parent::__construct();

    $this->load->library('language'); // line 25
    $this->language->loadLanguage();
    $this->load_main_lang_file();
    $this->load_visitor_geographical_data();
    $this->load->library('bread_crumb');
}

注意:如果您正在创建控制器,则应将其放在 中application/controllers/,而不是application/libraries/.

如果子(继承者)类有构造函数,则不会调用父构造函数,因为您将用子构造函数覆盖父构造函数,除非您使用 . 显式调用父构造函数parent::__construct();这就是面向对象编程中多态的概念

如果您在应用程序控制器初始化时不调用parent::__construct();,您将输掉课程并且Loader永远Core$this->load不会工作。

parent::__construct();仅当您想__construct()在控制器中声明将覆盖父级的方法时才需要使用。

模型也是如此,但parent::__construct();在模型中使用只会记录一条调试消息Model Class Initialized,因此如果您需要知道模型何时初始化(在日志中),请继续使用,如果没有,请忽略它。

于 2013-08-19T19:38:28.440 回答