小编给大家分享一下ThinkPHP6应用初始化的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强> ThinkPHP6源码分析之应用初始化强>
应用程序构建
先来看看在__construct中做了什么,基本任何框架都会在这里做一些基本的操作,也就是从这里开始延伸出去。
public function __construct (string rootPath 美元;=,& # 39;& # 39;) { ,,,这个→美元thinkPath ,,=,目录名(__DIR__),只DIRECTORY_SEPARATOR; ,,,这个→美元rootPath ,,,=, rootPath 美元;?,空白(rootPath美元,DIRECTORY_SEPARATOR),只DIRECTORY_SEPARATOR :, $ this→getDefaultRootPath (); ,,,这个→美元appPath ,,,,=, $ this→rootPath 只& # 39;应用# 39;,只DIRECTORY_SEPARATOR; ,,,这个→美元runtimePath =, $ this→rootPath 只& # 39;运行时# 39;,只DIRECTORY_SEPARATOR; ,,,if (is_file ($ this→appPath 只& # 39;provider.php& # 39;)), { ,,,,,,,这个→美元绑定(include $ this→appPath 只& # 39;provider.php& # 39;); ,,,} ,,,静态:setInstance ($); ,,,这个→美元实例(& # 39;应用# 39;,,这美元); ,,,这个→美元实例(& # 39;认为\容器# 39;,,这美元); }
●从魔术的方法的参数rootPath来看,是支持自定义根目录路径的。
●设置了thinkPath, rootPath, appPath, runtimePath
●绑定了默认的服务提供者,一共提供了两个,app \ Reques和app \ ExceptionHandle,实际上你使用的请求就是它。具体到appPath查看
●设置当前容器实例应用
●将应用程序($)实例绑定到容器中,分别是应用程序容器和认为\
这里需要注意的是应用程序类是继承容器的,所以就是将自身实例绑定到容器中。
在这里似乎整个应用就已经初始化结束了?这里我需要把一部分请求运行的内容放在这里说,因为那里才是框架主要的初始化工作,我并不认为将这一部分初始化工作放在请求运行中是合理的。
<强>主要的初始化强>
public function 初始化() { ,,,这个→美元initialized =,真的; ,,,这个→美元beginTime =, microtime(真正的); ,,,这个→美元beginMem ,=, memory_get_usage (); ,,,//,加载环境变量 ,,,if (is_file ($ this→rootPath 只& # 39;.env& # 39;)), { ,,,,,,,这个→美元env→负载($ this→rootPath 只& # 39;.env& # 39;); ,,,} ,,,这个→美元configExt =, $ this→env→得到(& # 39;config_ext& # 39;,, & # 39;。php # 39;); ,,,这个→美元debugModeInit (); ,,,//,加载全局初始化文件 ,,,这个→美元负载(); ,,,//,加载框架默认语言包 ,,,langSet 美元;=,$ this→朗→defaultLangSet (); ,,,这美元→朗→负载($ this→thinkPath 只& # 39;朗# 39;,只DIRECTORY_SEPARATOR 只langSet 美元;只& # 39;。php # 39;); ,,,//,加载应用默认语言包 ,,,这个→美元loadLangPack ($ langSet); ,,,//,监听AppInit ,,,这美元→→事件触发(& # 39;AppInit& # 39;); ,,,作用是($ this→配置→(& # 39;app.default_timezone& # 39;,, & # 39;亚洲/上海# 39;)); ,,,//,初始化 ,,,foreach ($ this→initializers as 美元初始化),{ ,,,,,,,这个→美元使(初始化美元)→init ($); ,,,} ,,,return 美元; }
●加载.env环境变量文件
●加载配置文件以及应用内的文件
●加载应用内的常见。php
●加载助手函数在thinkPath目录下的帮手。php
●加载配置文件
●加载应用目录下的事件。php事件
●注册应用目录下的服务。php服务
●加载语言包
●监听AppInit事件,利用该事件可以做一些请求前的工作
●设置时区
●注入所有服务并且启动服务
<强>服务注册强>
初始化过程中,进行服务注册,那么服务注册做了哪些事情呢?该如何使用的服务呢?
public function 注册(服务,美元,bool force 美元;=,假) { ,,,registered 美元;=,$ this→getService(服务); ,,,if (registered 美元;,,,!迫使美元),{ ,,,,,,,return 美元注册; ,,,} ,,,if (is_string(服务)美元),{ ,,,,,,,service 美元;=,new 服务美元($); ,,,} ,,,if (method_exists(服务,美元,& # 39;注册# 39;)),{ ,,,,,,,服务→美元注册(); ,,,} ,,,if (property_exists(服务,美元,& # 39;结合# 39;)),{ ,,,,,,,这个→美元绑定(服务→美元绑定); ,,,} null null null null null null null null null null null null null null null null null null null null null null null null null null null nullThinkPHP6应用初始化的实现方法