CodeIgniter访问核心类构造函数中的CI超级对象

时间:2012-11-03 18:59:52

标签: php codeigniter

我在application / core / MY_Lang.php中有核心类,这个类扩展了CI_Lang类,并覆盖了基类的构造函数:

class MY_Lang extends CI_Lang {
    function __construct()
    {
        parent::__construct();
    }
}

我如何从我班级的构造函数访问数据库对象。

我尝试访问CI超级对象,但目前尚未加载类CI_Controller

    if (class_exists('CI_Controller'))
    {
        $this->CI =& get_instance();
    }

2 个答案:

答案 0 :(得分:2)

好吧,看起来我只能调用get_instance()。

但是我发现了一个类似的帖子,建议使用 post_controller_constructor “hook”来调用你的函数

见这里:CodeIgniter: get_instance inside My_Lang

Code Igniter挂钩的文档位于:http://ellislab.com/codeigniter/user_guide/general/hooks.html

所以我猜你在 application / config / hooks.php 文件中想要添加如下内容:

$hook['post_controller_constructor'] = array(
                                'class'    => 'MY_Lang',
                                'function' => '__construct',
                                'filename' => 'MY_Lang.php',
                                'filepath' => 'core',
                                'params'   => array()
                                );

我没有对此进行过测试,但是如果你没有完全开始工作,请告诉我,我可以进行适当的测试。

当然,然后在您在钩子中指定的函数中,您需要调用 get_instance(),然后加载数据库库并执行您想要的任何工作。

答案 1 :(得分:0)

您只需使用$this->CI =& get_instance();,就不需要其他代码,因为您有if (class_exists('CI_Controller')) { ... }

这样您就可以使用CI调用,例如$this->CI->load->view$this->CI-load->lang等。

虽然我从未使用CI挂钩,但我认为这不是您的需要或需要的,$this->CI =& get_instance();应该可以正常工作。