[李景山php]每天TP5-20161206|Loader.php-4

时间:2021-11-22 15:22:19
    // 注册composer自动加载
private static function registerComposerLoader()
{
// 默认没有 ,不会执行
if (is_file(VENDOR_PATH . 'composer/autoload_namespaces.php')) {
$map = require VENDOR_PATH . 'composer/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
self::addPsr0($namespace, $path);
}
}// 加载命名空间

if (is_file(VENDOR_PATH . 'composer/autoload_psr4.php')) {
$map = require VENDOR_PATH . 'composer/autoload_psr4.php';
foreach ($map as $namespace => $path) {
self::addPsr4($namespace, $path);
}
}// 加载 Psr4 标准

if (is_file(VENDOR_PATH . 'composer/autoload_classmap.php')) {
$classMap = require VENDOR_PATH . 'composer/autoload_classmap.php';
if ($classMap) {
self::addClassMap($classMap);
}
}// 加载 classmap

if (is_file(VENDOR_PATH . 'composer/autoload_files.php')) {
$includeFiles = require VENDOR_PATH . 'composer/autoload_files.php';
foreach ($includeFiles as $fileIdentifier => $file) {
if (empty(self::$autoloadFiles[$fileIdentifier])) {
__require_file($file);
self::$autoloadFiles[$fileIdentifier] = true;
}
}
}// 加载 文件
}

/**
* 导入所需的类库 同java的Import 本函数有缓存功能
* @param string $class 类库命名空间字符串
* @param string $baseUrl 起始路径
* @param string $ext 导入的文件扩展名
* @return boolean
*/

public static function import($class, $baseUrl = '', $ext = EXT)
{
// 导入 类文件
static $_file = [];// 静态文件 仓库
$key = $class . $baseUrl;// key 文件
$class = str_replace(['.', '#'], [DS, '.'], $class);//处理 class
if (isset($_file[$key])) {
return true;
}// 如果 加载过了 这个 文件, 就直接
if (empty($baseUrl)) {// 如果起始路径 为空,就是默认值
list($name, $class) = explode(DS, $class, 2);// 返回 类的 前面两个数组

if (isset(self::$prefixDirsPsr4[$name . '\\'])) {// 如果存在这个 Psr4
// 注册的命名空间
$baseUrl = self::$prefixDirsPsr4[$name . '\\'];
} elseif ('@' == $name) {
//加载当前模块应用类库
$baseUrl = App::$modulePath;// 获取 @ 方式
} elseif (is_dir(EXTEND_PATH . $name)) {
$baseUrl = EXTEND_PATH;// 获取 基础 地址
} else {
// 加载其它模块的类库
$baseUrl = APP_PATH . $name . DS;
}
} elseif (substr($baseUrl, -1) != DS) {
$baseUrl .= DS;
}// 获取 baseUrl


// 如果类存在 则导入类库文件
if (is_array($baseUrl)) {// 如果 基础地址 为 baseUrl
foreach ($baseUrl as $path) {
$filename = $path . DS . $class . $ext;// baseUrl
if (is_file($filename)) {
break;// 找到了 文件 就退出
}
}
} else {
$filename = $baseUrl . $class . $ext;
}// 获取 了 filename

if (!empty($filename) && is_file($filename)) {// 如果 没有 文件, 如果有这个文件
// 开启调试模式Win环境严格区分大小写
if (IS_WIN && pathinfo($filename, PATHINFO_FILENAME) != pathinfo(realpath($filename), PATHINFO_FILENAME)) {
return false;
}// 如果路径 不行
__include_file($filename);// 加载文件
$_file[$key] = true;// 执行 状态
return true;
}
return false;
}