首页 > 代码库 > [李景山php]每天TP5-20161206|Loader.php-4

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

// 注册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;
}


本文出自 “专注php 群号:414194301” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1859059

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