从入口文件起。在index.php入口文件中,主要引入了两个文件,一个是laravel/bootstrap/autoload.php另一个是laravel/bootstarp/app.php。
我们先说这个autoload.php文件。
这个文件正如它的名字一样,自动加载类,也就是解决命名空间下类的加载问题。它使用了一个autoload_real.php(这个文件在vendor/composer下)文件中的叫做ComposerAutoloaderInite(后面跟了许多数字,我也不知道为啥要这么做,哈哈哈)。这个类主要就是根据了几个相关的配置文件(姑且称之为配置文件吧):autoload_namespaces.php、autoload_psr4.php、autoload_classmap.php、autoload_files.php这四个文件中的信息实现自动加载。具体加载方式也很容易懂,其顺序是先在autoload_classmap.php文件中包含的命名空间找,找不到,然后根据PSR-4协议找,最后才是根据PSR-0协议找。
处理自动加载外还有就是会包含laravel/bootstrap/cache/compiled.php这个文件,当然这个文件不是框架自带的而是你自己写滴,主要用户提高你项目的性能。
再来看这个app.php文件。
这个文件先是注册了app服务容器。在注册完服务容器后立马向服务容器里绑定了三个服务(服务容器当然是用来装服务的啦)具体代码如下。
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
$app->singleton(
Illuminate