Thinkphp 5.x 框架引导 start.php
跟着分析的thinkphp版本是:5.0.24
首先包含了 start.php
跟进base.php,该文件主要实现的是 定义了一些常量 和 引入了 Loader类 来实现自动加载
继续跟进Loader.php中,还没进行任何操作,也没有构造方法,包含完了之后加载了一些配置文件就开始执行 三个方法
首先执行的第一个是:注册自动加载
// 注册自动加载 \think\Loader::register();
register会使用 spl_autoload_register 该函数会使用 think\Loader::autoload 去注册自动加载
然后走下面 Composer 自动加载支持,registerComposerLoader该方法 自动去加载一些用到的类
继续走它会先定义 命名空间
self::addNamespace([ 'think' => LIB_PATH . 'think' . DS, 'behavior' => LIB_PATH . 'behavior' . DS, 'traits' => LIB_PATH . 'traits' . DS, ]);
再加载类库映射文件
if (is_file(RUNTIME_PATH . 'classmap' . EXT)) { self::addClassMap(__include_file(RUNTIME_PATH . 'classmap' . EXT)); }
这里走完了之后就出来了,继续走 注册错误和异常处理机制
// 注册错误和异常处理机制 \think\Error::register();
继续跟进
这里调用的是\think\Error
不存在,所以会让 think\Loader::autoload 去自动加载,那么就会先进autoload方法中,其中的步骤就是 检测命名空间别名 ,然后去找你要实例化的类文件是否存在,存在的话则去包含该文件
包含完了之后开始 register 方法
public static function register() { error_reporting(E_ALL); // 开启所有的错误报告 set_error_handler([__CLASS__, 'appError']); set_exception_handler([__CLASS__, 'appException']); register_shutdown_function([__CLASS__, 'appShutdown']); }
将错误、异常、中止时分别交由 appError 、appException 、 appShutdown 处理,这三个函数在 thinkphp/library/think/Error.php 中定义
接着加载配置文件
最后跳出 base.php中 然后开始 App:run()->send(),这个自己分开记录了!!
参考文章:https://y4er.com/post/thinkphp5-source-read/#框架引导startphp
标签:
thinkphp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY