关于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~ 自顶留位。 这里应该是先找 application 目录下的相应文件,如果没找到再找 system 下的,如果还没找到就报错,楼主在仔细看一下 if ( ! file_exists($baseclass)) 这个,这是如果不存在,呵呵 OMG, 难道我最近杂事太多了。。。 if (file_exists($subclass)) 这不是找到了么 找到还往下干嘛 你如果要是从 system 下的类继承的,你不装载父类,怎么继承?呵呵
CI 里推荐这样的继承,也就是扩展基础类的功能。 多谢, 我其实也这样想过,可能是自定义的扩展类, CI这里不了解,自定义类一定要是继承的吗? 如果我在APPPATH/libraries下写个独立的类需要加载,这岂不加不来了。。 噢, 突然想到了,在框架里自定义类至少也要基于CI_Base吧,否则用框架干嘛。 是否是这个意思呢,呵呵 可以不从某个基类继承呀,CI 没有强制你必须继承,貌似也没有这样的 PHP 语法来限制吧?呵呵 可这段代码就是要强制继承或者与CI某个类组合的哇, 不然就show_error了 :dizzy:
页:
[1]
2