Laravel5.5解析-Composer自动加载

背景:使用composer下载laravel,仅仅记录启动流程,‘/’表示index.php所在目录

地址:入口文件index.php

require __DIR__.'/../vendor/autoload.php';//加载composer自动加载器

/…/vendor/autoload.php

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit::getLoader();//执行静态方法getLoader();

/…/vendor/composer/autoload_real.php

    public static function getLoader()
    {	
        spl_autoload_register(['ComposerAutoloaderInit','loadClassLoader']), true, true);//注册临时自动加载函数
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();//赋值静态属性为继承了PSR-0, PSR-4接口的ClassLoader实例,在该类中进行了最终自动加载函数的注册
        spl_autoload_unregister(['ComposerAutoloaderInit', 'loadClassLoader']);//注销临时自动加载函数


        require_once __DIR__ . '/autoload_static.php';//存放class名映射文件的脚本文件

        call_user_func(\Composer\Autoload\ComposerStaticInit::getInitializer($loader));//为$loader属性赋值,其中classMap映射类名与我文件,        
        $loader->register(true);//将$loader的loadClass方法注册为自动加载函数

        
        $includeFiles = Composer\Autoload\ComposerStaticInit::$files;//引入注册函数文件

        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequire($fileIdentifier, $file);
        }

        return $loader;//返回自动加载器实例
    }

其中call_user_func(\Composer\Autoload\ComposerStaticInit::getInitializer($loader))返回了一个匿名函数,然后call_user_func执行了该函数
/…/vendor/composer/autoload_static.php

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInit::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInit::$prefixDirsPsr4;
            $loader->fallbackDirsPsr4 = ComposerStaticInit::$fallbackDirsPsr4;
            $loader->prefixesPsr0 = ComposerStaticInit::$prefixesPsr0;
            $loader->classMap = ComposerStaticInit::$classMap;
        }, null, ClassLoader::class);
    }

\Closure代表匿名函数类,bind方法绑定一个匿名函数,其中null代表默认不绑定在实例中,也可以在该参数中添加实例,如果添加实例后,则通常需要在第三个参数中声明namespace+class,该文件中需要操作$loader,则需要声明ClassLoader::class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值