用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6083|回复: 11
收起左侧

关于CI_Loader的_ci_load_class()

[复制链接]
发表于 2009-3-2 14:59:08 | 显示全部楼层 |阅读模式
近日研究CI源码中,遇到个不理解的地方,望指教
CI_Loader.php第754行起
$subclass = APPPATH.'libraries/'.$subdir.config_item('subclass_prefix').$class.EXT;

            // Is this a class extension request?            
            if (file_exists($subclass))
            {
                $baseclass = BASEPATH.'libraries/'.ucfirst($class).EXT;
               
                if ( ! file_exists($baseclass))
                {
                    log_message('error', "Unable to load the requested class: ".$class);
                    show_error("Unable to load the requested class: ".$class);
                    // ....
                }
//....

这样它在APPPATH和BASEPATH都去找$class, 否则异常,难道我在APPPATH中自定义的类还要在BASEPATH中再写一个?
不知自己是否有想偏差了,指教~~plz~
 楼主| 发表于 2009-3-2 14:59:22 | 显示全部楼层
自顶留位。
发表于 2009-3-2 15:03:48 | 显示全部楼层
这里应该是先找 application 目录下的相应文件,如果没找到再找 system 下的,如果还没找到就报错,楼主在仔细看一下 if ( ! file_exists($baseclass)) 这个,这是如果不存在,呵呵
 楼主| 发表于 2009-3-2 15:07:51 | 显示全部楼层
OMG, 难道我最近杂事太多了。。。
 楼主| 发表于 2009-3-2 15:08:28 | 显示全部楼层
if (file_exists($subclass))    这不是找到了么 找到还往下干嘛
发表于 2009-3-2 15:23:57 | 显示全部楼层
你如果要是从 system 下的类继承的,你不装载父类,怎么继承?呵呵
CI 里推荐这样的继承,也就是扩展基础类的功能。
 楼主| 发表于 2009-3-2 15:29:19 | 显示全部楼层
多谢, 我其实也这样想过,可能是自定义的扩展类, CI这里不了解,自定义类一定要是继承的吗? 如果我在APPPATH/libraries下写个独立的类需要加载,这岂不加不来了。。
 楼主| 发表于 2009-3-2 15:31:17 | 显示全部楼层
噢, 突然想到了,在框架里自定义类至少也要基于CI_Base吧,否则用框架干嘛。 是否是这个意思呢,呵呵
发表于 2009-3-2 15:43:25 | 显示全部楼层
可以不从某个基类继承呀,CI 没有强制你必须继承,貌似也没有这样的 PHP 语法来限制吧?呵呵
 楼主| 发表于 2009-3-2 15:59:12 | 显示全部楼层
可这段代码就是要强制继承或者与CI某个类组合的哇, 不然就show_error了

本版积分规则