首页 新闻 会员 周边 捐助

phpcms 中类加载方法的疑问 (位于base.php中)

0
悬赏园豆:5 [待解决问题]

原代码如下:

/**
* 加载类文件函数
* @param string $classname 类名
* @param string $path 扩展地址
* @param intger $initialize 是否初始化
*/
private static function _load_class($classname, $path = '', $initialize = 1) {
static $classes = array();
if (empty($path)) $path = 'libs'.DIRECTORY_SEPARATOR.'classes';

$key = md5($path.$classname);
if (isset($classes[$key])) {
if (!empty($classes[$key])) {
return $classes[$key];
} else {
return true;
}
}
if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
$name = $classname;
if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
include $my_path;
$name = 'MY_'.$classname;
}
if ($initialize) {
$classes[$key] = new $name;
} else {
$classes[$key] = true;
}
return $classes[$key];
} else {
return false;
}
}

 

本方法中,设置$initialize = 1参数确定类的加载是否需要实例化。根据源代码,类的首次加载时将加载信息放入$classes数据中,如果$initialize = 1则放入类的对象,反之放入true值。

那么问题是:

1.无论放入的是类对象还是true值,以后加载类时判断语句if (!empty($classes[$key]))不是永远为真吗?

2.如果首次加载不需要实例化,那么以后通过该方法加载并返回该类对象,岂不是无法实现了?

php新手小菜的一点疑问,希望大神给予解答。万分感谢。

feira的主页 feira | 初学一级 | 园豆:200
提问于:2016-01-13 12:36
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册