我在Codeigniter核心类中创建了类的对象,我将在控制器中扩展这些对象,但是在创建对象之后,加载模型似乎存在问题。以下是我所做的
核心文件:
require_once('folder/systemize.php'); // class systemize is in this file
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
$systemize = new systemize();
$systemize->init();
}
初始化此对象后,加载模型将无法工作。
扩展MY_Controller的控制器文件
class Log extends MY_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('access_model', 'TEST');
$this->TEST->foo('param1', 'param2'); //function inside access_model
}
它会给我带来这些错误--遇到一个PHP错误
严重性:注意消息:未定义属性: Log::$TEST 致命错误:调用非对象上的成员函数foo()
如果我不创建系统化对象,这些错误就会得到解决。有人能告诉我如何解决这个问题吗?
编辑:系统化文件
class Systemize extends CI_Controller
{
function __construct() {
parent::__construct();
}
public function init() {
if('2' == '3') // false for now so it does nothing
{
$this->load->view("system/view_file");
exit();
}
}
Php错误指示调用TEST->foo的日志文件
如果我在创建对象之前加载模型,它可以工作,但反之亦然。我还是不明白为什么Codeigniter会这样?
发布于 2015-03-22 07:59:59
好的,在查看了Codeigniter的系统文件之后,我发现了问题的根源。现在CI_Controller的行为是,当我们扩展CI_Controller时,它创建控制器和模型的对象,并引用指针存储它。
现在我所做的就是用CI_Controller扩展系统。MY_Controller扩展了CI_Controller,这意味着创建$obj,存储指向将使用的CI所有对象的指针。但是当我手工创建扩展CI_Controller的系统对象时,它只创建了控制器对象,而不是模型对象,取代了$obj。这就是为什么加载模型会导致问题,因为$obj中没有model对象。
我发现的问题的解决方案是,我没有在MY_Controller中创建系统化对象。相反,我用Systemize扩展了MY_Controller,它开始完美地工作了。
另一个解决方案是,如果您不需要您的类中的CI功能,您可以创建类的对象,而不是用CI_Controller扩展它。
https://stackoverflow.com/questions/29185852
复制相似问题