mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-01 20:52:48 +08:00
增加命名空间别名功能
背景:
app\common\org\xx\yy 这样的命名空间太长,但是里面文件又很多,不想每个改namespace,怎么办?
解决方案:
Loader::addNamespaceAlias('yy', 'app\\common\\org\\xx\\yy');
直接使用
\yy\Abc::func();
This commit is contained in:
@@ -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 = '')
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user