ThinkPHP6应用初始化的实现方法

  介绍

小编给大家分享一下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   null

ThinkPHP6应用初始化的实现方法