load_class函数(system/core/commo…

load_class函数在PHP中用于动态加载类文件,主要检查指定的类是否已存在。如果不存在,它会在APPPATH和BASEPATH的libraries目录下查找对应的.php文件,并在找到后实例化该类。此外,它还支持类的扩展,允许加载自定义前缀的子类。如果无法找到指定的类文件,程序将退出并抛出错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

// 首先在application/libraries文件夹中寻找该类
// 然后在system/libraries文件夹中寻找
foreach (array(APPPATH, BASEPATH) as $path)
{
if (file_exists($path.$directory.'/'.$class.'.php'))//如果该类文件存在
{
$name = $prefix.$class;

if (class_exists($name) === FALSE)//检查类是否已定义
{
//如果没有定义则把该类文件包含进来并跳出循环
//寻找的都是核心类,由类前缀决定(CI)
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');
}
}

// 没有找到类则推出
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');
}

// 载入类文件后用此函数记录一下载入的类
is_loaded($class);
//实例化类对象并存入静态数组中记录
$_classes[$class] = new $name();
return $_classes[$class];
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值