企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
![](https://img.kancloud.cn/ac/22/ac22ee99c8665a9a9f185cfd19272590_1069x616.png)![](https://img.kancloud.cn/7b/fb/7bfb27edebdf874fd1ece9d15ee50aef_1163x464.png)~~~ require __DIR__ . '/../vendor/autoload.php'; //加载composer文件 // 执行HTTP应用并响应 $http = (new App())->http; //实例化think\app 核心类,执行里面的http::class的构造方法 为什么会执行http的构造方法呢,我们在think\App 并没有发现有http这个方法,实际上调用了think\App的父类 __get魔术方法 ~~~ /** * 获取容器中的对象实例 * @access public * @param string $abstract 类名或者标识 * @return object */ public function get($abstract) { if ($this->has($abstract)) { return $this->make($abstract); } throw new ClassNotFoundException('class not exists: ' . $abstract, $abstract); } ~~~ 会在bind 类里面匹配当前传递的这个http名称然后找到这个http::class的实例 可以看到这个http构造方法仅做了一步: 加载项目根目录route下的app.php 里面可以看到app是通过助手函数基类helper.php 进行加载的.但是这一步是还没有执行的,因为helper助手函数基类还没有被include进去,include操作在~~~ $response = $http->run(); http类的runWithRequest 里面执行了http类的初始化initialize 1 可以看到里面主要是用了ini模式加载的我们常用的.env文件 2 debug模式输出缓存区到页面方便调试 接下来的几个加载比较重要 3 加载了common.php我们的自定义函数库(类似于下面提到的helper)以及helper.php 4 循环加载了app路径下的 config目录下的config文件,所以config目录下的所有文件都是会默认全部加载的 5 加载app/event.php数组里面的event .使用观察者模式注册到event类 6 加载app/service.php 然后调用register方法 ~~ $response->send(); $http->end($response); ~~~