composer中 自动加载函数中 getloader中为何要以php5.6作为区分$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');,这个区分主要区分的什么?
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit812e73c32a9b50cd0733a00f38392e8a', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit812e73c32a9b50cd0733a00f38392e8a', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit812e73c32a9b50cd0733a00f38392e8a::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->setClassMapAuthoritative(true);
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit812e73c32a9b50cd0733a00f38392e8a::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire812e73c32a9b50cd0733a00f38392e8a($fileIdentifier, $file);
}
return $loader;
}
}
区分的两条分支其一是:使用autoload_static进行静态初始化,二是调用核心类接口初始化。静态初始化只支持PHP5.6以上版本并且不支持HHVM虚拟机。所以以php5.6且HHVM_VERSION是否存在作为区分。
参考自:https://laravel-china.org/art...