###### TP执行流程详解
#### TP执行流程
我查看了TP的核心源码,下面是我对TP执行的一些理解(从入口开始,只是一个大概流程):
1. 入口文件:
单入口文件,里面包含TP的入口文件,``require './ThinkPHP/ThinkPHP.php';
有多个模块的话也可以定义多个入口,(比如对于后台模块,再新建一个admin.php)
2.TP入口文件ThinkPHP.php
1. 记录运行时间(钩子),用于输出日志和调试,个人认为没什么用.........
2. 定义系统常量:URL模式、类文件后缀、当前文件目录、系统运行目录、是否调试模式、缓存目录、模版目录、配置文件目录....等等,然后引入核心Think类``Think.class.php`` ,引入后执行这个类中的start函数
3.Think.class.php类以及start函数
1.在start函数中,先定义注册函数,然后定义错误和异常处理函数(spl_autoload_register用于自动加载未加载的类,register_shutdown_function定义PHP程序执行完成后执行的函数,set_exception_handler是自定义异常处理函数,这三个函数的参数都是一个方法名,当自动加载、执行完成、出现异常的时候,将用这里面传的方法参数代替php原本的处理机制,比如 set_exception_handler('Think\Think::appException'); 出现异常的时候会调用appException函数,而不是PHP原生的异常处理函数)
2.加载各种文件:核心文件、配置文件、模式别名定义、模式行为定义等
3.设置系统时区
4.调用App类中的run方法
5.这个类中的其他函数就是在第一步中说到的自定义加载、处理函数,(自定义加载中用到了类名映射,就是从当前url中解析出模块名、控制器名、方法名,)
4.App类以及run函数
1.run函数中先执行监听(钩子类中的)函数监听init方法
2.执行init方法(加载动态配置、安全过滤等);
3.再执行钩子类监听函数,监听begin方法,设置session,获得到应用执行时间
4.执行exec函数(去寻找从url中解析出的类,并将其实例化后调用方法,输出结果)
5.执行监听函数监听end函数(应用结束);
这样整个执行流程就完毕了 ,我看了好几天...挺难懂的,而且我觉得TP中要动态加载的类太多了,对于中小型网站来说,用不上,反而影响运行速度,然后我把这个执行流程里面比较重要的部分挑出来,写进了我的框架中,里面的大部分函数名与TP相同,但是完全是我自己用代码实现的,并没有用TP的思路。下一章会详细讲解我自己理解的MVC框架及思路。