0

我在 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();
    }
4

2 回答 2

2

好的,看起来我对能够调用 get_instance() 是错误的。

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

请参见此处:CodeIgniter:My_Lang 中的 get_instance

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()然后加载数据库库并执行您想要的任何工作。

于 2012-11-03T19:55:54.280 回答
0

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

这将允许您使用 CI 调用,例如$this->CI->load->view,$this->CI-load->lang等。

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

于 2012-11-04T06:52:24.183 回答