recolee 发表于 2009-3-2 14:59:08

关于CI_Loader的_ci_load_class()

近日研究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~

recolee 发表于 2009-3-2 14:59:22

自顶留位。

Hex 发表于 2009-3-2 15:03:48

这里应该是先找 application 目录下的相应文件,如果没找到再找 system 下的,如果还没找到就报错,楼主在仔细看一下 if ( ! file_exists($baseclass)) 这个,这是如果不存在,呵呵

recolee 发表于 2009-3-2 15:07:51

OMG, 难道我最近杂事太多了。。。

recolee 发表于 2009-3-2 15:08:28

if (file_exists($subclass))    这不是找到了么 找到还往下干嘛

Hex 发表于 2009-3-2 15:23:57

你如果要是从 system 下的类继承的,你不装载父类,怎么继承?呵呵
CI 里推荐这样的继承,也就是扩展基础类的功能。

recolee 发表于 2009-3-2 15:29:19

多谢, 我其实也这样想过,可能是自定义的扩展类, CI这里不了解,自定义类一定要是继承的吗? 如果我在APPPATH/libraries下写个独立的类需要加载,这岂不加不来了。。

recolee 发表于 2009-3-2 15:31:17

噢, 突然想到了,在框架里自定义类至少也要基于CI_Base吧,否则用框架干嘛。 是否是这个意思呢,呵呵

Hex 发表于 2009-3-2 15:43:25

可以不从某个基类继承呀,CI 没有强制你必须继承,貌似也没有这样的 PHP 语法来限制吧?呵呵

recolee 发表于 2009-3-2 15:59:12

可这段代码就是要强制继承或者与CI某个类组合的哇, 不然就show_error了 :dizzy:
页: [1] 2
查看完整版本: 关于CI_Loader的_ci_load_class()