原代码如下:
/**
* 加载类文件函数
* @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新手小菜的一点疑问,希望大神给予解答。万分感谢。