index.php
bootstrap/autoload.php --> 自动加载
bootstrap/app.php --> 初始化服务容器(注册基础的服务提供者(事件、日志、路由)、注册核心类别名)
bootstrap/app.php --> 注册共享的Kernel和异常处理器
Foundation\Http\Kernel.php --> 处理请求和响应
index.php --> 将响应信息发送到浏览器
index.php --> 处理继承自TerminableMiddleware接口的中间件(Session)并结束应用生命周期
1,包括全局函数的加载、顶级命名空间映射、PSR0、PSR4标准的实现
#核心加载类: $loader = new \Composer\Autoload\ClassLoader(); #核心查找方法: loadClass()->findFile() #PSR0的类和路径映射 autoload_namespaces.php #PSR4的类和路径映射 autoload_psr4.php #具体类和路径映射 autoload_classmap.php #其他自动加载的php文件 (一次性全部加载非自动) autoload_files.php
注意:命名空间本质上是一种规范:更加细致的管理类(使用namespace),选择类(使用use)和加载类(通过命名空间和路径的建立映射关系,动态加载)
#核心类
$app = new Illuminate\Foundation\Application(path) #继承自Illuminate\Container\Container
#核心机制
1,反射
2,class_alias //核心类别名
构造方法中初始化
$this->registerBaseBindings();//绑定自身实例 $this->registerBaseServiceProviders();//基础服务 //事件机制 $this->register(new EventServiceProvider($this)); //日志服务 $this->register(new LogServiceProvider($this)); //路由服务 $this->register(new RoutingServiceProvider($this));//注册了路由 $this->registerCoreContainerAliases();//别名机制可以使门面类对应到实例
实例对象注册了3个类
//http服务的核心类 $app->singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); //命令行:php artisan 的功能 $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); //异常处理类 $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class );
四,生命周期核心类:App\http\Kernel
#实例核心类:
$app->make(Illuminate\Contracts\Http\Kernel::class); #继承自Illuminate\Foundation\Http\Kernel
构造函数初始化
#绑定应用类 $this->app = $app; #绑定路由 $this->router = $router; #自带全局中间件 protected $middleware=[...] #设置路由中间件 //前置中间件 $router->middlewarePriority = $this->middlewarePriority; //中间件组 $router->middlewareGroup($key, $middleware); //中间件别名 $router->aliasMiddleware($key, $middleware);
handle()方法
#调用 $response = $kernel->handle( $request = Illuminate\Http\Request::capture() );
#具体逻辑 $this->app->instance(‘request‘, $request); Facade::clearResolvedInstance(‘request‘); $this->bootstrap(); return (new Pipeline($this->app)) ->send($request) ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware) ->then($this->dispatchToRouter());
loadClass
原文:https://www.cnblogs.com/tkzc2013/p/13814153.html