page contents

PHP面试:Thinkphp的底层源码分析讲解

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

attachments-2021-06-wodSKynL60cd657644c97.png

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

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

attachments-2021-06-RzWBONP660cd6530027d0.png

A:定义了一个常量,这里的作用我们会在后面讲到。

B:在首次打开此文件时加载了一个同级目录下的,thinkphp文件夹中的start.php。我们先 看一下这个thinkphp文件整体结构。

attachments-2021-06-YxWd0f7360cd658aadc24.png

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

attachments-2021-06-OSoIn8Ps60cd65a560b2e.png

这里我们看到文件第一步加载了同级目录下base.php。

B:静态调用执行了一个run方法 。那么我们就知道这个方法有可能就在base.php文件中, 接下来我们去看。下图为base.php的内容:

![!](https://img-blog.csdnimg.cn/20200916161234623.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg3NTgzNg==,size_16,color_FFFFFF,t_70#pic_center)

下面是他们分别的解释:

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文件中,我们接着分析,在最后使用了两个方法,如下图:

attachments-2021-06-k2JFAwh060cd66272c9b7.png

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

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-sKSIKvMv62ac40fbb1fac.jpeg

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章