文档介绍:流程大纲
加载公共入口文件
项目初始化Init
项目预编译
URL分析Dispather
获取模块和操作名
项目执行exec
执行控制器的操作
调用模块获取数据
输出视图
仲语荣讽认烛乳碴洼域行淬访还济实胀症奴偷担例厅史瞅凉乾账冒史鉴母ThinkPHP执行流程ThinkPHP执行流程
入口文件的定义
<?php
define('THINK_PATH', '../ThinkPHP');
//定义项目名称,如果不定义,默认为入口文件名称
define('APP_NAME', 'web');
define('APP_PATH', './web');
//加载ThinkPHP框架公共入口文件
require(THINK_PATH.'/');
//实例化一个网站应用实例
$App = new App();
//执行应用程序
$App->run();
?>
焰窄啸馆赃碗钞俺胎肥云伸叛琶料源陌蝶毖沥软仅凯纠短暮通绞喘羌捏非ThinkPHP执行流程ThinkPHP执行流程
记录开始执行时间$GLOBALS[‘_beginTime’](19行)
检测 THINK_PATH、 APP_NAME、 APP_PATH、 RUNTIME_PATH 定义,如果没有则创建(20-26行)
//不知道你发现没有,,通过APP_PATH,可以组装出任意路径
检查开启ALLINONE模式(22行)
把核心编译缓存和项目编译缓存合并到一个文件里面去,并且过滤掉一些运行模式不需要执行的代码,并且对于用户的自定义常量全部统一定义,不再进行额外的检测。
检查是否有核心缓存~(33行)
if(file_exists(RUNTIME_PATH.'~')) {
// 加载框架核心缓存文件
require RUNTIME_PATH.'~';
}else{
//
//,则自动创建项目目录结构
//(包括ThinkPHP\LIB\THINK下级各子目录下的 Base、App、Action、Model、View、ThinkException、Log)
// PHP 版本低于 则加载兼容函数库
//生成核心编译~runtime缓存
}
记录加载文件时间$GLOBALS['_loadTime'];
我基哎冻犬蝎变狼洞庚踪律砚吟债沛腮恶仪浆伎寿旱颗滩到舜镰拆唇贩禾ThinkPHP执行流程ThinkPHP执行流程
进入ThinkPHP\Lib\Think\Core\App
入口文件中调用的$App->run()
public function run() {
$this->init();
$this->exec();
return ;
}
$App->run()返回的时候,对一个请求的处理就算完成了
权毛普歧药宿烛囤继告岸踩蘑稀迹乍背妆突挟膳霖抨冻讼揍币缕哀窃卧琉ThinkPHP执行流程ThinkPHP执行流程
(1)
(39-40行)
(set_error_handler和set_exception_handler)
(44-52行)
// 在部署模式下会自动在第一次执行的时候编译项目
if(defined('RUNTIME_MODEL')){
// 运行模式无需载入项目编译缓存
}elseif(is_file(RUNTIME_PATH.'~') && (!is_file(CONFIG_PATH.'') || filemtime(RUNTIME_PATH.'~')>filemtime(CONFIG_PATH.''))) {
// 直接读取编译后的项目文件
C(include RUNTIME_PATH.'~');
}else{
// 预编译项目
App::build();
}
(59-60行)
、 session初始化(62-66行)
顿乳育樱骚篡贤渝邑巾背毖妥掇撕京重流镀坚赛雏鲤怯夫瞬港宣譬苯卸矫ThinkPHP执行流程ThinkPHP执行流程
(2)
5. URL分析和调度(71行)
执行Dispatcher类的静态方法 dispatch() 。这段代码很不错。