123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <?php
- namespace 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;
- }
|