0

我有控制器:

应用程序/控制器/bob.php

然后在我在控制器 Bob.php 中使用的库中,我有以下代码:

$CI =& get_instance();
echo get_class($CI);

所以我打开url“domain.com/bob”,当没有安装HMVC时,我得到了正确的回声,即

  • 鲍勃

一旦我安装了 HMVC,结果是:

  • CI

所以基本上,这意味着我不能使用在 Bob 中声明的 $CI->someVariableINeed,因为它在 CI 中不存在。请注意,$CI->load->helper()、$CI->load->view()、.. 都可以正常工作。我试过:

class Bob extends CI_Controller

class Bob extends MX_Controller

但它仍然不起作用。我一直在寻找 24 小时,但没有找到任何东西,希望 SO 上的人知道这一点。我知道这不是访问类成员的一种非常干净的方法,但是这个问题是对具有数十万行代码的现有项目的简化,因此我无法更改这一点,库必须访问这些成员变量至少我改变了整个项目。

4

1 回答 1

1

哦是的!!我是男人,我修好了!考虑过可能创建我的“自己的” get_instance() 系统,这就是我所做的:

class MY_Controller extends MX_Controller
{
    public static $instance;
    function __construct()
    {
        self::$instance || self::$instance =& $this;
        ...
    }
}

然后在库中,或在助手中或任何你需要使用它的时髦地方:

$CI =& MY_Controller::$instance;

注意,如果你自动加载一个库,如果它在库的 __construct() 中,MY_Controller::$instance 将不起作用,因为 MY_Controller 尚未定义

于 2013-05-08T22:36:57.893 回答