Thinkphp底层源码分析第一章

首先我们学习此章节的内容大家可能需要有一些基础才行,接着对PHP内置字符窜数组相关函数会比较多一点,当然不太熟悉的朋友,其实可以借助手册看下去。下面我们开始正题:

实际上我们知道,thinkPHP5从一开始最先执行的入口文件为 public下面的index.php,跟以往的TP3有所不同,官网给的友情提示是为了安全起见。那么接下来我们先分析public目录下的index.php入口文件,如图所示:

A出定义了一个常量,这里的作用我们会在后面讲到。B处在首次打开此文件时加载了一个同级目录下的,thinkphp文件夹中的start.php。我们先看一下这个thinkphp文件整体结构。

 

这三个文件夹里面存放的东西分别是,字符格式,thinkphp库,以及模板样式(这里放的是一些内置跳转 默认首页的样式),所以以后大家想要改掉一些样式可以在这里动刀。我们接着来看star.php文件。

这里我们看到文件第一步加载了同级目录下base.php,并在B处静态调用执行了一个run方法 。那么我们就知道这个方法有可能就在base.php文件中,接下来我们去看。下图为base.php的内容:

下面是他们分别的解释:

A:这里定义版本常量,具体作用是在命令行执行输出版本信息时会用到

B:定义THINK_START_TIME常量,microtime函数是PHP内置的,获取当前时间戳,可以到微秒,如果给定TRUE值,将会返回一个浮点数,这里作用可能是记录日志等作用吧。

C:定义THINK_START_MEM常量,memory_get_usage函数是获取内存使用的。如果设置为 TRUE,获取系统分配的真实内存尺寸。如果未设置或者设置为 FALSE,将是 emalloc() 报告使用的内存量。这里大概是会在内置的trace那个东西中用到吧。

D:这里定义文件格式后缀

E:定义文件分隔符,window下面跟Linux下面斜杠不同,DIRECTORY_SEPARATOR是PHP内置常量(显示系统分隔符)

F:检测是否存在 否则定义框架路径常量,也就是这里的thinkphp文件的路径,紧跟分隔符常量DS,因为框架很可能不一定在window下运行,比如Linux的服务器。

G:定义库文件常量 注意一下这里路径后都有斜杠,这样做的好处是为了方便,如果一个加一个不加,到最后可能自己也记不清到底加没加斜杠了,所以这里作者统一都加了斜杠。

H:定义核心路径常量

I:定义trait常量

J:定义应用目录常量 此处在再项目入口文件出已经定义了一次 后面只是为了以防没有定义,用内置变量获取再加入分隔符

K:定义根目录常量这里也就是WWW环境下的路径

L:定义extend扩展目录常量

M:定义vendor常量 也就是composer载入的那个文件夹

N:定义runtime缓存目录常量

O:定义日志常量

P:  定义配置缓存常量

R:定义配置文件常量 这里其实在又是我们需要动态改变一定的配置 比如说验证码我在某个地方需要配置成5个数字 而其他地方我又不想要(所以通过这常量就可以实现动态配置了)

S:配置文件后缀常量

T: 环境变量前缀常量

接着我们需要注意star.php中的namespace命名空间 这里指的是thinkphp\library\think目录处。

所以我们再回到start.php文件处,第二个东西APP::run()想必大家都明白了吧,他这里执行了thinkphp\library\think下的App.php文件中的run方法来初始化框架,不知道大家是否还记得整个项目的是可以配置多入口文件的,我们可以指定admin.php访问到后台也是在这个App.php文件中实现的。我们再回到base.php文件中,我们接着分析,在最后使用了两个方法,如下图:

这个配置文件实际就是在同star.php base.php的convertion.php文件,再通过调用thinkphp\library\think目录下的config.php类中的set方法实现的配置。

那么今天就先讲到这里了,下次我们接着分析,再见各位。

 
 

猜你喜欢

转载自blog.csdn.net/qq_39338006/article/details/88071646