首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类对象创建后代码点火器的加载模型

类对象创建后代码点火器的加载模型
EN

Stack Overflow用户
提问于 2015-03-21 17:37:00
回答 1查看 1.1K关注 0票数 1

我在Codeigniter核心类中创建了类的对象,我将在控制器中扩展这些对象,但是在创建对象之后,加载模型似乎存在问题。以下是我所做的

核心文件:

代码语言:javascript
运行
复制
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的控制器文件

代码语言:javascript
运行
复制
    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()

如果我不创建系统化对象,这些错误就会得到解决。有人能告诉我如何解决这个问题吗?

编辑:系统化文件

代码语言:javascript
运行
复制
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会这样?

EN

回答 1

Stack Overflow用户

发布于 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扩展它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29185852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档