改进composer自动加载

This commit is contained in:
yunwuxin
2018-04-18 18:26:03 +08:00
parent ac9375254a
commit 64e7a27f74

View File

@@ -56,9 +56,9 @@ class Loader
private static $fallbackDirsPsr0 = []; private static $fallbackDirsPsr0 = [];
/** /**
* @var array 自动加载的文件 * @var array 需要加载的文件
*/ */
private static $autoloadFiles = []; private static $files = [];
/** /**
* 自动加载 * 自动加载
@@ -292,12 +292,11 @@ class Loader
$declaredClass = get_declared_classes(); $declaredClass = get_declared_classes();
$composerClass = array_pop($declaredClass); $composerClass = array_pop($declaredClass);
foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap'] as $attr) { foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {
if (property_exists($composerClass, $attr)) { if (property_exists($composerClass, $attr)) {
self::${$attr} = $composerClass::${$attr}; self::${$attr} = $composerClass::${$attr};
} }
} }
} else { } else {
self::registerComposerLoader(); self::registerComposerLoader();
} }
@@ -348,22 +347,20 @@ class Loader
self::addClassMap($classMap); self::addClassMap($classMap);
} }
} }
if (is_file(VENDOR_PATH . 'composer/autoload_files.php')) {
self::$files = require VENDOR_PATH . 'composer/autoload_files.php';
}
} }
// 加载composer autofile文件 // 加载composer autofile文件
public static function loadComposerAutoloadFiles() public static function loadComposerAutoloadFiles()
{ {
if (is_file(VENDOR_PATH . 'composer/autoload_files.php')) { foreach (self::$files as $fileIdentifier => $file) {
$includeFiles = require VENDOR_PATH . 'composer/autoload_files.php'; if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
foreach ($includeFiles as $fileIdentifier => $file) { __require_file($file);
if (isset($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
continue;
}
if (empty(self::$autoloadFiles[$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
__require_file($file);
self::$autoloadFiles[$fileIdentifier] = true;
}
} }
} }
} }