本文目录导读:

在 ThinkPHP 项目中,调试模式和变量输出是开发过程中非常重要的功能,下面详细讲解这两部分内容。
调试模式
开启调试模式
在 ThinkPHP 中,调试模式通过 APP_DEBUG 常量控制,在入口文件(如 public/index.php)中设置:
// 开启调试模式
define('APP_DEBUG', true);
// 关闭调试模式(生产环境)
// define('APP_DEBUG', false);
注意事项:
- 生产环境必须关闭调试模式,否则会暴露敏感信息,影响性能
- 调试模式开启后会显示详细的错误信息、SQL 日志、页面 Trace 信息等
调试模式的影响
开启调试模式后:
| 功能 | 开启调试模式 | 关闭调试模式 |
|---|---|---|
| 错误信息 | 显示详细错误 | 显示友好错误页 |
| SQL 日志 | 记录并显示 | 不记录 |
| 页面 Trace | 显示 | 不显示 |
| 缓存 | 不使用 | 使用 |
| 模板编译缓存 | 每次编译 | 编译缓存 |
变量输出方法
dump() 函数
这是最常用的调试输出函数,功能类似 PHP 的 var_dump(),但输出格式化更美观:
// 在控制器中
public function test() {
$data = ['name' => 'Tom', 'age' => 20];
$user = new User();
// 输出数组
dump($data);
// 输出对象
dump($user);
// 输出多个变量
dump($data, $user);
// 停止执行
dump($data);die; // 或使用 halt()
}
halt() 函数
halt() 是 dump() 和 die() 的组合,输出后终止程序执行:
public function test() {
$data = ['name' => 'Tom'];
halt($data); // 输出后停止执行
echo '这段代码不会执行';
}
var_dump() 和 print_r()
PHP 原生函数,在 ThinkPHP 中也可以使用:
public function test() {
$data = ['name' => 'Tom'];
var_dump($data); // 显示数据类型和值
print_r($data); // 只显示值,格式更简洁
}
使用日志调试
记录日志
ThinkPHP 提供了日志功能,用于记录调试信息:
use think\facade\Log;
public function test() {
$data = ['name' => 'Tom'];
// 记录不同级别的日志
Log::info('这是一个信息日志');
Log::error('这是一个错误日志');
Log::debug('调试信息:' . json_encode($data));
Log::warning('警告信息');
// 记录到特定通道
Log::channel('debug')->info('自定义通道日志');
}
查看日志
日志默认保存在 runtime/log/ 目录下,按日期分文件:
runtime/log/
├── 202401/ # 月份目录
│ ├── 01.log # 日期文件
│ ├── 02.log
│ └── ...
└── ...
使用 Trace 调试
开启 Trace
在 config/app.php 中配置:
// 应用调试模式 'app_trace' => true, // 开启页面Trace
Trace 面板内容
开启后页面底部会显示 Trace 面板,包含:
- 运行时间
- 加载文件数
- 数据库查询次数
- SQL 语句
- 缓存使用情况
- 会话信息
- 包含的 PHP 文件列表
变量输出到页面
模板变量输出
在控制器中分配变量到模板,然后在模板中输出:
// 控制器
public function test() {
$name = 'Tom';
$data = ['name' => 'Tom', 'age' => 20];
return view('index/test', [
'name' => $name,
'data' => $data
]);
}
<!-- 模板文件 views/index/test.html -->
<!DOCTYPE html>
<html>
<head>变量输出测试</title>
</head>
<body>
<p>姓名:{$name}</p>
<p>年龄:{$data.age}</p>
<!-- 调试输出(可配合条件判断) -->
{if condition="app.env('APP_DEBUG')"}
<pre>{:dump($data)}</pre>
{/if}
</body>
</html>
JSON 输出(接口调试)
public function test() {
$data = ['name' => 'Tom', 'age' => 20];
// 输出 JSON(模拟接口返回)
return json($data);
// 或使用 response()
return response($data, 200, ['Content-Type' => 'application/json']);
}
调试技巧
使用 T()
ThinkPHP 提供了 T() 函数,可以输出调试信息到浏览器控制台:
public function test() {
T('开始调试');
// 执行一些操作
T('结束调试');
}
调试模式下的异常处理
use think\exception\ValidateException;
public function test() {
try {
// 业务逻辑
validate([...])->check($data);
} catch (ValidateException $e) {
// 在调试模式下输出详细信息
if (app()->isDebug()) {
dump($e->getMessage());
dump($e->getTrace());
}
return json(['error' => '验证失败']);
}
}
自定义调试方法
// 在公共控制器或基类中定义
protected function debugVars($var, $label = '') {
if (app()->isDebug()) {
echo ($label ? "=== $label ===<br>" : '');
dump($var);
echo "<hr>";
}
}
// 使用
public function test() {
$user = User::find(1);
$this->debugVars($user, '用户信息');
$list = User::all();
$this->debugVars($list, '用户列表');
}
生产环境配置建议
// config/app.php
return [
// 关闭调试模式
'app_debug' => false,
// 调整错误提示
'error_message' => '页面错误!请稍后再试~',
// 关闭 Trace
'app_trace' => false,
// 日志记录级别
'log' => [
'level' => ['error', 'critical'], // 只记录错误级别
],
];
| 调试方法 | 使用场景 | 特点 |
|---|---|---|
dump() |
快速查看变量 | 格式化输出,可查看类型 |
halt() |
输出并终止 | 常用于排查问题 |
Log 类 |
记录调试信息 | 可持久化,适合复杂调试 |
| Trace 面板 | 查看运行详情 | 包含 SQL、性能等信息 |
| 模板输出 | 视图调试 | 结合模板引擎使用 |
| JSON 输出 | 接口调试 | 模拟 API 返回 |
最佳实践:
- 开发环境开启调试模式,使用
dump()、halt()快速调试 - 复杂问题使用日志记录,方便后期分析
- 生产环境务必关闭调试模式,使用错误日志记录
- 调试完成后及时清理调试代码,避免影响性能
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播