• PHP
  • 对composer自动加载的认识

dajiang dajiang 02-05 15:21 Edited 78浏览

通过composer下载的第三方扩展,会自动有一个vendor目录和一个autoload.php,vendor目录中包含composer目录,目录结构如下

0a9b337cb2141932049f455503dbf32a.png

在使用过程中首先应该在如自动加载脚本

// autoloader when using Composer      
require ('D:/www/xhl/phpbarcode/vendor/autoload.php');      
// autoload.php脚本中会自动载入autoload_real.php,在其中载入composer\autoload_static.php;      
// 在autoload_static.php中      
public static function getInitializer(ClassLoader $loader)      
{      
    return \Closure::bind(function () use ($loader) {      
        $loader->prefixLengthsPsr4 = ComposerStaticInit713d85be4d0a0ba294ebd5a1837c9432::$prefixLengthsPsr4;      
        $loader->prefixDirsPsr4 = ComposerStaticInit713d85be4d0a0ba294ebd5a1837c9432::$prefixDirsPsr4;      

    }, null, ClassLoader::class);      
}      

通过闭包函数为$loader即composer\ClassLoader.php对象赋予属性并注册成自动加载函数

spl_autoload_register(array($this, 'loadClass'), true, $prepend);   

大部分通过findFileWithExtension找到对应的自动加载类;

$this->prefixLengths    

Psr4提供了一个快速查找的分组对应的命名空间

$prefixLengths    

Psr4中的长度决定截取的类名,其中的索引值大小写敏感

$length = $this->prefixLengthsPsr4[$first][$search];      
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {      
    return $file;      
}      
saonian 修改了文章内容 02-05 17:16
saonian 修改了文章内容 02-05 17:15

人过留名 雁过留声