ThinkPHP调试核心是快速验证逻辑、看清数据流向、避免干扰输出;提供dump()、halt()、trace()、param()四大工具,分别用于变量输出、流程中断、多点追踪和安全取参。

用dump()直接看变量结构
在控制器、模型或中间件里任意位置写 dump($data),就能原样输出数组、对象、资源等所有类型变量,带缩进和类型标识,比var_dump更清爽。
注意两点:
• 线上环境(APP_DEBUG=false)下它会静默失效,不报错也不输出,所以别用来做生产日志;
• 想格式整齐可加预格式化标签:
echo ''; dump($data); echo '
';
用halt()卡住执行流程
相当于 dump($data); exit;,适合确认某段逻辑是否真正执行到。
常见用法:
• halt($user):输出变量后立刻终止,防止后续代码干扰判断;
• halt('登录校验完成'):传字符串更轻量,不触发序列化,适合打标记;
⚠️ CLI环境下调用halt()会退出整个进程,定时任务中请改用 throw new \think\Exception()。
用trace()记录多点状态
不是输出到页面,而是自动汇总到右下角Trace面板的「Debug」页签,按时间排序,还能看到两点间耗时。
比如:
• trace('start', 'debug') 放入口处;
• trace('sql_done', 'sql') 放查询之后;
• trace('render', 'view') 放模板渲染前。
不用拼接字符串,不担心缓存丢失,框架底层已接管写入。
用param()统一取参,避开input()陷阱
函数里要取id,直接写 $id = param('id') 就行——它自动从GET、POST、路由变量里找,顺序是路由 > POST > GET。
而 input('id') 默认只读GET,表单用POST提交同名参数就拿不到,容易漏值。
param()还默认过滤XSS,比raw_input()更安全,比层层判断请求方式更省事。
立即学习“PHP免费学习笔记(深入)”;



















