CodeIgniter &get_instance() 在 php5.6 版本中不起作用?

Posted

技术标签:

【中文标题】CodeIgniter &get_instance() 在 php5.6 版本中不起作用?【英文标题】:CodeIgniter &get_instance() not working in php5.6 version? 【发布时间】:2017-10-29 16:33:03 【问题描述】:

我的 codeigniter 站点在 php5.4 版本中正常运行,但是当我将我的 php 版本升级到 php5.6.30 时它无法正常工作。

function &get_instance()
       
    return CI_Controller::get_instance();

上面的函数在我文件的第 233 行,它返回空值。

错误 - 致命错误:在第 233 行的 Coginiter_site\system\core\CodeIgniter.php 中找不到类“CI_Controller”

我已经追踪了错误点—— system/core/common.php

下的代码
if ( ! function_exists('load_class'))

    function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
    
        static $_classes = array();

        // Does the class exist?  If so, we're done...
        if (isset($_classes[$class]))
        
            return $_classes[$class];
        

        $name = FALSE;

        // Look for the class first in the local application/libraries folder
        // then in the native system/libraries folder
        foreach (array(APPPATH, BASEPATH) as $path)
        
            if (file_exists($path.$directory.'/'.$class.'.php'))
            
                $name = $prefix.$class;

                if (class_exists($name) === FALSE)
                
                    require($path.$directory.'/'.$class.'.php');
                

                break;
            
        

        // Is the request a class extension?  If so we load it too
        if (file_exists(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php'))
        
            $name = config_item('subclass_prefix').$class;

            if (class_exists($name) === FALSE)
            
                require(APPPATH.$directory.'/'.config_item('subclass_prefix').$class.'.php');
            
        

        // Did we find the class?
        if ($name === FALSE)
        
            // Note: We use exit() rather then show_error() in order to avoid a
            // self-referencing loop with the Excptions class
            exit('Unable to locate the specified class: '.$class.'.php');
        

        // Keep track of what we just loaded
        is_loaded($class);

        $_classes[$class] = new $name();
        return $_classes[$class];
    

返回空结果 这行创建了一个问题 $_classes[$class] = new $name(); 请检查一下。

【问题讨论】:

CodeIgniter: Class 'CI_Controller' not found的可能重复 我认为你的系统文件问题我在第 361 行有这个功能。所以首先你备份你的文件夹并下载新的 codeigniter 并替换系统文件夹可能会解决你的问题 你能把你使用&get_instance()函数的代码放上来 $this->CI =& get_instance();在助手和核心文件夹中 你替换新的系统文件夹? 【参考方案1】:

你能关注第一个solution吗?希望它能解决您的问题。

【讨论】:

我的问题与加载视图无关……是的,它与“致命错误:在 path\to\system\core\CodeIgniter 中找不到类'CI_Controller'有关。 php on line 231" ......我也做了这个解决方案......但我认为 $ci =& get_instance();这里仍然为空。【参考方案2】:

您可以尝试使用this,在CodeIgniter.php 第 75 行进行更改

set_error_handler('_exception_handler');

set_exception_handler('_exception_handler');

更新:

如果这不起作用,也许你可以检查一下其他的东西:

    检查是否是数据库错误(这很奇怪,但有时是数据库错误 显示为 'CI_Controller not found',例如,有一个坏 db 姓名)。 检查是否更改:$config['log_threshold'] = 0; 有效 给你 重新安装整个 CI 框架系统文件夹。

Here和here有同样的问题,你可以检查所有的答案。

如果这些都不起作用,请尝试将一些代码和上下文发布到您的控制器。

希望对你有帮助!

【讨论】:

是的,我这样做了,我很清楚 (& get_instance();) 被赋予 null... 在核心文件夹下的文件名为 MY_Controller.php

以上是关于CodeIgniter &get_instance() 在 php5.6 版本中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

CI-CodeIgniter中“超级对象”:$CI =& get_instance()

CodeIgniter:My_Lang 中的 get_instance

使用 get_instance() 时自动完成 Codeigniter

text CodeIgniter - 何时使用get_instance()

库或助手上的 Codeigniter 超级对象,使用 get_instance() 或发送 $this?

Codeigniter - 从模型访问控制器数据