thinkphp之程序执行的流程(精辟篇)
(2018-03-19 13:27:52)
标签:
it |
分类: Thinkphp |
虽然说学习thinkphp3.2框架已经很久了,但是都没有认真的理清一下程序在框架中的执行流程,等到程序执行出错时,真的是一脸蒙逼,说起来真是惭愧,你有没有一样的经历或者想了解框架的执行流程的,下面就是精辟的总结:http://www/uc/myshow/blog/misc/gif/E___6708EN00SIGG.gif
总体来说,应用的流程涉及到几个文件:
index.php
ThinkPHP.php
Think.class.php
App.class.php
Dispatcher.class.php
ThinkPHP/Mode/common.php
ReadHtmlBehavior.class.php
Route.class.php
Hook.class.php
ContentReplaceBehavior.class.php
WriteHtmlCacheBehavior.class.php
ThinkPHP框架开发的应用的标准执行流程如下:
1. 用户URL请求
2. 调用应用入口文件(通常是网站的index.php)
3. 载入框架入口文件(ThinkPHP.php)
4. 记录初始运行时间和内存开销
(引用自ThinkPHP.php)
// 记录开始运行时间
$GLOBALS['_beginTime'] = microtime(TRUE);
// 记录内存初始使用
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] =
memory_get_usage();
5. 系统常量判断及定义
(引用自ThinkPHP.php)
// 系统常量定义
defined('THINK_PATH') or
define('THINK_PATH',
__DIR__.'/');
defined('APP_PATH')
or
define('APP_PATH',
dirname($_SERVER['SCRIPT_FILENAME']).'/');
defined('APP_STATUS') or
define('APP_STATUS',
''); // 应用状态 加载对应的配置文件
defined('APP_DEBUG')
or
define('APP_DEBUG',
false); // 是否调试模式
6. 载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化
(引用自ThinkPHP.php)
// 应用初始化
Think\Think::start();
7. 设置错误处理机制和自动加载机制
(引用Think.class.php)
// 注册AUTOLOAD方法
spl_autoload_register('Think\Think::autoload');
// 设定错误和异常处理
register_shutdown_function('Think\Think::fatalError');
set_error_handler('Think\Think::appError');
set_exception_handler('Think\Think::appException');
8. 调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)
(引用Think.class.php)
// 初始化文件存储方式
Storage::connect(STORAGE_TYPE);
9. 部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤22)
(引用Think.class.php)
if(!APP_DEBUG && Storage::has($runtimefile)){
Storage::load($runtimefile);
}
10. 读取应用模式(由APP_MODE常量定义)的定义文件(以下以普通模式为例说明)
Thinkphp框架默认的应用模式 为普通模式。
(引用Think.class.php)
// 读取应用模式
总体来说,应用的流程涉及到几个文件:
index.php
ThinkPHP.php
Think.class.php
App.class.php
Dispatcher.class.php
ThinkPHP/Mode/common.php
ReadHtmlBehavior.class.php
Route.class.php
Hook.class.php
ContentReplaceBehavior.class.php
WriteHtmlCacheBehavior.class.php
ThinkPHP框架开发的应用的标准执行流程如下: