增加命名空间别名功能

背景:
app\common\org\xx\yy 这样的命名空间太长,但是里面文件又很多,不想每个改namespace,怎么办?
解决方案:
Loader::addNamespaceAlias('yy', 'app\\common\\org\\xx\\yy');
直接使用
\yy\Abc::func();
This commit is contained in:
huangdijia
2016-03-03 13:32:05 +08:00
parent 4c059e619e
commit 3104b310b5

View File

@@ -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 = '')
{