在了解如何加载当前模块下的扩展之前,需要先了解import方法。
/**
* 导入所需的类库 同java的Import 本函数有缓存功能
* @param string $class 类库命名空间字符串
* @param string $baseUrl 起始路径
* @param string $ext 导入的文件扩展名
* @return boolean
*/
function import($class, $baseUrl = '', $ext = EXT)
{
static $_file = array();
$class = str_replace(array('.', '#'), array('/', '.'), $class);
if (isset($_file[$class . $baseUrl])) {
return true;
} else {
$_file[$class . $baseUrl] = true;
}
$class_strut = explode('/', $class);
if (empty($baseUrl)) {
if ('@' == $class_strut[0] || MODULE_NAME == $class_strut[0]) {
//加载当前模块的类库
$baseUrl = MODULE_PATH;
$class = substr_replace($class, '', 0, strlen($class_strut[0]) + 1);
} elseif ('Common' == $class_strut[0]) {
//加载公共模块的类库
$baseUrl = COMMON_PATH;
$class = substr($class, 7);
} elseif (in_array($class_strut[0], array('Think', 'Org', 'Behavior', 'Com', 'Vendor')) || is_dir(LIB_PATH . $class_strut[0])) {
// 系统类库包和第三方类库包
$baseUrl = LIB_PATH;
} else {
// 加载其他模块的类库
$baseUrl = APP_PATH;
}
}
if (substr($baseUrl, -1) != '/') {
$baseUrl .= '/';
}
$classfile = $baseUrl . $class . $ext;
if (!class_exists(basename($class), false)) {
// 如果类不存在 则导入类库文件
return require_cache($classfile);
}
return null;
}
以上为import的全部代码。
请注意方法的第二行有个替换,. (英文句号)替换为 / ,'#'替换为 .(英文句号)
加载当前模块的扩展要用的@,因为有@的才会加载当前的模块。
加上之前的替换方法,我们应该用:
import("@.Util.A");
这样就会加载你的模块下Util目录下的A.class文件。
在不是很确定的时候,可以将"classfile"变量输出,看看具体的路径,以了解为什么没有加载!!