Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php spl_autoload_register()在不同的开发环境中调用不同,会影响对象继承_Php_Codeigniter_Spl Autoload Register - Fatal编程技术网

Php spl_autoload_register()在不同的开发环境中调用不同,会影响对象继承

Php spl_autoload_register()在不同的开发环境中调用不同,会影响对象继承,php,codeigniter,spl-autoload-register,Php,Codeigniter,Spl Autoload Register,好的,我有一个使用CodeIgniter的web应用程序 我用我的_控制器扩展了基本控制器。为了能够用另一个基类SC_控制器扩展我的_控制器,我使用了一种自动加载方法 function my_autoload_function($class) { if( strpos($class, 'CI_') !== 0 ) { // for debug to see when its called echo "<!--" . APPPATH . 'co

好的,我有一个使用CodeIgniter的web应用程序

我用我的_控制器扩展了基本控制器。为了能够用另一个基类SC_控制器扩展我的_控制器,我使用了一种自动加载方法

function my_autoload_function($class) {
    if( strpos($class, 'CI_') !== 0 )
    {
        // for debug to see when its called
        echo "<!--" . APPPATH . 'core/' . $class . EXT . "-->";
        if (is_file(APPPATH . 'core/'. $class . EXT))
            include_once( APPPATH . 'core/'. $class . EXT );
    }
}

if(function_exists('spl_autoload_register')) {
    // we have SPL, so register the autoload function
    spl_autoload_register('my_autoload_function', true, true);      
} else {
    // if there isn't, we don't need to worry about using the stack,
    // we can just register our own autoloader
    function __autoload($class_name) {
        my_autoload_function($class_name);
    }
}
函数我的自动加载函数($class){
if(strpos($class,'CI')!=0)
{
//用于调试以查看其调用时间
回声“;
if(是_文件(APPPATH.core/.$class.EXT))
包括_一次(APPPATH.core/.$class.EXT);
}
}
如果(函数_存在('spl_自动加载_寄存器')){
//我们有SPL,所以注册自动加载功能
spl_自动加载_寄存器(“我的自动加载_函数”,真,真);
}否则{
//如果没有,我们就不必担心使用堆栈,
//我们可以注册我们自己的自动加载器
函数自动加载($class\u名称){
my_autoload_函数($class_name);
}
}
我已将SC_控制器扩展为其他用户可访问(在“核心”文件夹外)控制器。在我的本地开发系统上可以很好地访问它们。另外,我可以看到我的autoloader函数被调用来加载包含“SC_Controller”的文件。这是正确的

但是,一旦加载到服务器上,就会出现问题:用户可访问的扩展控制器可用(这意味着父级MY_Controller->SC_Controller也已加载),但从未调用我的autoloader函数。此外,这些控制器不继承其父类的任何成员

事实上,如果我调用
get\u class\u方法($this)
我只看到本地成员。如果我调用
get\u class\u方法(“SC\u控制器”)
它只返回构造函数。当我在本地计算机上进行这些调用时,会列出整个成员方法数组(包括所有继承的方法)


这可能是什么原因造成的?是的,SPL存在于我的服务器上。

出于调试目的,不要依赖
get\u class\u方法
。相反,在数据对象上使用
var\u dump
,并从中使用
\u toString
方法列出所有函数等:@hakre谢谢。我已经换成那样了。仍然显示出几乎没有继承任何东西。