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

[李景山php]每天TP5-20161204|Loader.php-2

    public static function autoload($class)// 这个就加载文件
    {// 自动加载 类 // 加载一个class
        // 检测命名空间别名
        if (!empty(self::$namespaceAlias)) {// 如果有命名空间
            $namespace = dirname($class);// 通过类名 的路径 来的 命名空间
            if (isset(self::$namespaceAlias[$namespace])) {// 如果有别名, 通过路径来 dirname
                $original = self::$namespaceAlias[$namespace] . ‘\\‘ . basename($class);
                //连接称为 最新的 的 original 类的
                if (class_exists($original)) {// 如果这个可以 存
                    return class_alias($original, $class, false);// just return the class_alias
                    // 如果存在这个 真实的 class_alias 别名: 然后 进入到对应到的 class
                }
            }
        }
// if this empty and this namespaceAlias also been said and this class has,
        //and return this class alias
        // else
        if ($file = self::findFile($class)) {// get file from the class name
            // 获取一个 在任何环境下 都能够兼容的 文件路径
// file self::findFiles
            // Win环境严格区分大小写
            if (IS_WIN && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) {
                return false;
            }// if IS_WIN in the this is  a  good type to make program so strong

            __include_file($file);// use a function to wrap a nomarl type
            return true;// then return true
        }
    }// 这个函数的意思,基本上就是 自动加载对应的文件 类文件

    /**
     * 查找文件
     * @param $class
     * @return bool
     */
    private static function findFile($class)
    {// 查找文件
        if (!empty(self::$map[$class])) {// 如果 文件存在  类映射
            // 类库映射
            return self::$map[$class];
        }// 如果类名 映射

        // 查找 PSR-4
        $logicalPathPsr4 = strtr($class, ‘\\‘, DS) . EXT;// 返回第一节数据

        $first = $class[0];// 获取 最新的数据
        if (isset(self::$prefixLengthsPsr4[$first])) {// 如果设置了 这个  预定义变量
            foreach (self::$prefixLengthsPsr4[$first] as $prefix => $length) {// 循环
                if (0 === strpos($class, $prefix)) {// 找到文件
                    foreach (self::$prefixDirsPsr4[$prefix] as $dir) {// loop 目录
                        if (is_file($file = $dir . DS . substr($logicalPathPsr4, $length))) {
                            return $file;
                        }// 如果 文件 存在 就返回
                    }
                }
            }
        }// 如果 文件 存在  直接返回

        // 查找 PSR-4 fallback dirs
        foreach (self::$fallbackDirsPsr4 as $dir) {// 如果 有 fallback Dirs Psr4  循环展示
            if (is_file($file = $dir . DS . $logicalPathPsr4)) {
                return $file;
            }
        }
// 如果有这个标准下 的 文件  返回文件
        // 查找 PSR-0
        if (false !== $pos = strrpos($class, ‘\\‘)) {// 如果这里
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
            . strtr(substr($logicalPathPsr4, $pos + 1), ‘_‘, DS);// 处理文件
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, ‘_‘, DS) . EXT;// 这里 获取 另外一种方式
        }

        if (isset(self::$prefixesPsr0[$first])) {// 如果 含这个  first 就是 class 里面的 第一个
            foreach (self::$prefixesPsr0[$first] as $prefix => $dirs) {// 循环 这里的 dir
                if (0 === strpos($class, $prefix)) {// 如果 开始就是 这个 prefix
                    foreach ($dirs as $dir) {// 循环 数据
                        if (is_file($file = $dir . DS . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }// 有这样 格式的 数据,直接返回, 而且,是循环的

        // 查找 PSR-0 fallback dirs
        foreach (self::$fallbackDirsPsr0 as $dir) {
            if (is_file($file = $dir . DS . $logicalPathPsr0)) {
                return $file;
            }
        }// 如果文件有

        return self::$map[$class] = false;// 否则, 返回数据
    }


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

[李景山php]每天TP5-20161204|Loader.php-2