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方法实现的配置。
那么今天就先讲到这里了,下次我们接着分析,再见各位。
Thinkphp底层源码分析第一章相关推荐
- Thinkphp底层源码分析
Thinkphp底层源码分析第一章 首先我们学习此章节的内容大家可能需要有一些基础才行,接着对PHP内置字符窜数组相关函数会用的比较多一点,当然不太熟悉的朋友,其实可以借助手册看下去.下面我们开始正题 ...
- QCad源码分析 第一章
鉴于介绍Qcad相关的文章很少,决定写此博客,一来便于日后查找,二来要有分享精神.本文章基于Qcad3 .21.3.4的开源版本进行分析,分过程中难免有疏漏,如果有新的发现会及时更改,不足之处望高手指 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
- 【mybatis源码】 mybatis底层源码分析
[mybatis源码] mybatis底层源码分析 1.测试用例 2.开撸源码 2.1 SqlSessionFactory对象的创建与获取 2.2 获取SqlSession对象 2.3 获取接口的代理 ...
- 集合底层源码分析之HashMap《上》(三)
集合底层源码分析之HashMap<上>(三) 前言 源码分析 HashMap主要属性及构造方法分析 tableSizeFor()方法源码分析 Node类源码分析 TreeNode类源码分析 ...
- 视频教程-Spring底层源码分析-Java
Spring底层源码分析 鲁班学院-子路老师曾就职于谷歌.天猫电商等多家互联网公司,历任java架构师.研发经理等职位,参与并主导千万级并发电商网站与后端供应链研发体系搭建,多次参与电商大促活动技术保 ...
- ArrayList底层源码分析
声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...
- Mybatis源码分析第一天------Mybatis实用篇
Mybatis源码分析第一天------Mybatis实用篇 一切最基本的操作就是参考官方文档:https://mybatis.org/mybatis-3/zh/configuration.html ...
最新文章
- 手工构建ISO的基本步骤
- 登陆成功率 99%,云知声携手平安好医生推声纹登录系统
- 动车废票二维码将泄露个人信息 暂无防止破解法
- mysql修改i数据库名_数据库操作之mysqli语句的增删改查0424/14:36
- 腾讯云安全专家 Killer 告诉你,企业上云怎么做更安全
- Linux 退出vi编辑模式
- 五、MySQL联合查询学习笔记 + 查询总结(详解)
- 详细介绍MPLS路由协议的相关概念知识
- 关于直线,折线切割平面的问题
- python resize重置大小
- PYTHON莫名其妙的崩溃
- 计算机ppt操作知识,计算机基础知识:PPT常用操作(一)
- Adobe Flash Player 下载
- 【JS】console.log()打印出五彩斑斓的黑
- 加壳工具WinLicense使用教程,以v2.3.9.0为例
- 技术写作的两种方向和方法
- SCUBA的linux安装
- leetcode35.搜素插入位置
- Sublime Text 4 设置中文、汉化
- 安卓版计算机C语言翻译器,如何用C语言来制作翻译器
热门文章
- linux取消注释快捷键设置,Notepad++怎么增加整行删除快捷键?添加/取消区块注释?...
- 分享一个超好看回忆相册(代码自取)
- 二代身份证阅读器 C#、JAVA调用教程
- Kotlin 基础——Map集合详解
- kotlin中的Map集合类
- 正则表达式中小括号()的作用是什么
- openMVS:极线校正Fusiello
- 计算机学开发,Lazarus
- [导入]补脾益气--四神汤
- Html+Css+js实现春节倒计时效果(移动端和PC端)