为什么在将 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');
}
}
你忘了打电话__construct
的方法CI_Controller
class:
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');
}
Note:如果您要创建控制器,则应将其放置在application/controllers/
,不在application/libraries/
.
如果子(继承)类有一个构造函数,则不会调用父构造函数,因为您将使用子类覆盖父构造函数,除非您使用显式调用父构造函数parent::__construct();
。这就是这个概念多态性 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming in 面向对象编程 http://en.wikipedia.org/wiki/Object-oriented_programming
如果你不打电话parent::__construct();
当应用程序控制器初始化时,你会丢失Loader and Core https://github.com/EllisLab/CodeIgniter/blob/2.1-stable/system/core/Controller.php#L37-L54类和$this->load
永远不会起作用。
Using parent::__construct();
仅当您想声明时才需要__construct()
您的控制器中的方法将覆盖父级的方法。
对于模型来说也是如此,但是使用parent::__construct();
在您的模型中仅记录一条调试消息Model Class Initialized
,所以如果你需要知道Model什么时候初始化(在日志中),继续使用它,如果没有,请忽略它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)