在创建类的Object后在Codeigniter中加载模型

时间:2015-03-21 17:37:00

标签: php codeigniter

我在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为什么会这样?

1 个答案:

答案 0 :(得分:1)

在浏览了Codeigniter的系统文件并在其中打印和回显后,我找到了问题的根源。现在CI_Controller的行为是当我们扩展CI_Controller时,它创建了Controller和Model的对象,并通过引用指针来存储它。

现在我做的是我用CI_Controller扩展了系统化。 MY_Controller扩展了CI_Controller,这意味着创建了$ obj,存储指向将要使用的CI的所有对象的指针。 但是当我手动创建扩展CI_Controller的systemize对象时,它只创建了Controller的对象而不是Model,并替换了$ obj。 这就是为什么加载模型会导致问题,因为$ obj中没有模型对象。

解决方案我发现的问题是我没有在MY_Controller中创建systemize的对象。相反,我使用Systemize扩展了MY_Controller,它开始完美运行。

另一种解决方案是,如果您不需要在类中使用CI功能,则可以创建类的对象,而不是使用CI_Controller扩展它。