From 3104b310b587dcd7a1f8b78bb436f5a2ba51ca20 Mon Sep 17 00:00:00 2001 From: huangdijia Date: Thu, 3 Mar 2016 13:32:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=91=BD=E5=90=8D=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=E5=88=AB=E5=90=8D=E5=8A=9F=E8=83=BD=20=E8=83=8C?= =?UTF-8?q?=E6=99=AF=EF=BC=9A=20app\common\org\xx\yy=20=E8=BF=99=E6=A0=B7?= =?UTF-8?q?=E7=9A=84=E5=91=BD=E5=90=8D=E7=A9=BA=E9=97=B4=E5=A4=AA=E9=95=BF?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E6=98=AF=E9=87=8C=E9=9D=A2=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=88=E5=BE=88=E5=A4=9A=EF=BC=8C=E4=B8=8D=E6=83=B3=E6=AF=8F?= =?UTF-8?q?=E4=B8=AA=E6=94=B9namespace=EF=BC=8C=E6=80=8E=E4=B9=88=E5=8A=9E?= =?UTF-8?q?=EF=BC=9F=20=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88=EF=BC=9A=20Loa?= =?UTF-8?q?der::addNamespaceAlias('yy',=20'app\\common\\org\\xx\\yy');=20?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E4=BD=BF=E7=94=A8=20\yy\Abc::func();?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Loader.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/library/think/Loader.php b/library/think/Loader.php index 3baf8868..2b8fb202 100644 --- a/library/think/Loader.php +++ b/library/think/Loader.php @@ -19,6 +19,8 @@ class Loader protected static $load = []; // 命名空间 protected static $namespace = []; + // 命名空间别名 + protected static $namespaceAlias = []; // PSR-4 private static $prefixLengthsPsr4 = []; private static $prefixDirsPsr4 = []; @@ -28,6 +30,16 @@ class Loader // 自动加载 public static function autoload($class) { + // 检测命名空间别名 + $ns = dirname($class); + $cn = basename($class); + if (isset(self::$namespaceAlias[$ns])) { + $original = self::$namespaceAlias[$ns].'\\'.$cn; + if (class_exists($original)) { + class_alias($original, $class); + return true; + } + } // 检查是否定义类库映射 if (isset(self::$map[$class])) { if (is_file(self::$map[$class])) { @@ -47,6 +59,7 @@ class Loader if (!strpos($class, '\\')) { return false; } + // 解析命名空间 list($name, $class) = explode('\\', $class, 2); if (isset(self::$namespace[$name])) { // 注册的命名空间 @@ -94,6 +107,16 @@ class Loader } } + // 注册命名空间别名 + public static function addNamespaceAlias($namespace, $original = '') + { + if (is_array($namespace)) { + self::$namespaceAlias = array_merge(self::$namespace, $namespace); + } else { + self::$namespaceAlias[$namespace] = $original; + } + } + // 注册自动加载机制 public static function register($autoload = '') {