| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | <?phpnamespace daswork;class Loader{    // protected static $instance = [];    // 类名映射    protected static $map = [];    // 命名空间别名    protected static $namespaceAilas = [];    // // 自动加载的文件    // private static $autoloadFiles = [];    // 命名空间与路径映射    private static $namespaces = [];    // 保存已加载的类    private static $classMaps = [];    // // 自动加载    // public static function autoload($class)    // {    //     // 检测命名空间别名    //     if (!empty(self::$namespaces)) {    //         $namespace = dirname($class);    //         if (isset(self::$namespaces[$namespace])) {    //             $original = self::$namespaces[$namespace] . '\\' . basename($class);    //             if (class_exists($original)) {    //                 return class_alias($original, $class, false);    //             }    //         }    //     }    //     if ($file = self::findFile($class)) {    //         // Win环境严格区分大小写    //         if (IS_WIN && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) {    //             return false;    //         }    //         __include_file($file);    //         return true;    //     }    // }    private static function autoload($class)    {        if (in_array($class, self::$classMaps)) {            return true;        }        if ($file = self::findFile($class)) {            // Win环境严格区分大小写            if (IS_WIN && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) {                return false;            }            __include_file($file);            self::$classMaps[] = $class;            return true;        }    }        public static function findFile($class)    {        if (IS_WIN) {            $namespace = \dirname($class);            // 有命名空间映射的            if (isset(self::$namespaces[$namespace])) {                $file = self::$namespaces[$namespace] . basename($class) . EXT;                // var_dump($file);                return $file;            }            // var_dump(substr($class,strpos($class, '\\') + 1));            $model = substr($class, 0, strpos($class, '\\'));                        if ($model=='app') {                $file = APP_PATH . DS. str_replace('\\', DS, substr($class, strpos($class, '\\') + 1)) . EXT;                    return $file;            }        } else {            $class = str_replace('\\', '/', $class);            $namespace = str_replace('/','\\',dirname($class));            // 有命名空间映射的            if (isset(self::$namespaces[$namespace])) {                $file = self::$namespaces[$namespace] . basename($class) . EXT;                return $file;            }            $model = substr($class, 0, strpos($class, '/'));            if ($model=='app') {                $file = APP_PATH . str_replace($model, '', $class) . EXT;                // var_dump($class);                return $file;            }        }    }    // 注册系统自动加载    public static function register($autoload = '')    {        spl_autoload_register($autoload ?: 'daswork\\Loader::autoload', true, true);        self::$namespaces = [            'daswork' => CORE_PATH,            'daswork\lib' => CORE_PATH . 'lib' . DS        ];    }}/** * 作用范围隔离 * * @param $file * @return mixed */function __include_file($file){    return include $file;}function __require_file($file){    return require $file;}
 |