在 PHP 中打印数据(调试、输出内容)有多种方法,适用于不同场景(如调试变量、页面输出、日志记录),以下是最常用的打印方式及详细用法:
一、核心打印函数(按使用频率排序)
1. echo - 最基础的输出(推荐页面显示)
-
特点:无返回值,可输出多个字符串,速度快,适合页面直接显示内容。
-
语法 :
echo 字符串/变量(可省略括号)。 -
示例 :
php// 1. 输出字符串 echo "Hello PHP!"; echo '单引号字符串也支持'; // 2. 输出变量 $name = "张三"; $age = 25; echo "姓名:" . $name . ",年龄:" . $age; // 字符串拼接(用 . 连接) // 3. 输出多个值(用逗号分隔) echo "姓名:", $name, ",年龄:", $age; // 4. 输出HTML echo "<h1>这是标题</h1>";
2. print_r() - 打印数组/对象(推荐调试)
-
特点:格式化输出数组、对象、字符串,可读性强,适合调试复杂数据类型。
-
语法 :
print_r(变量, 是否返回字符串)(第二个参数为true时,不直接输出,返回字符串)。 -
示例 :
php// 打印数组 $list = ['张三', '李四', '王五']; print_r($list); // 输出结果: // Array ( [0] => 张三 [1] => 李四 [2] => 王五 ) // 打印关联数组 $user = [ 'id' => 1, 'name' => '张三', 'dept' => '技术部' ]; print_r($user); // 输出结果: // Array ( [id] => 1 [name] => 张三 [dept] => 技术部 ) // 打印对象(如之前的 $list 集合) $list = $this->allEmployeeList(); print_r($list); // 可选:用 <pre> 标签格式化输出(页面查看更清晰) echo "<pre>"; print_r($list); echo "</pre>";
3. var_dump() - 调试神器(显示数据类型+值)
-
特点 :不仅输出值,还显示数据类型和长度,适合精准调试(如判断变量是否为
null、数组维度等)。 -
语法 :
var_dump(变量1, 变量2, ...)。 -
示例 :
php$name = "张三"; $age = 25; $isMale = true; $salary = null; var_dump($name, $age, $isMale, $salary); // 输出结果: // string(6) "张三" (字符串,长度6字节) // int(25) (整数) // bool(true) (布尔值) // NULL (空值) // 调试数组(显示每个元素的类型) $user = ['id' => 1, 'name' => '张三']; var_dump($user);
4. var_export() - 可复用的数组/对象打印
-
特点:输出可直接执行的 PHP 代码(数组/对象的字面量形式),适合复制调试结果到代码中复用。
-
语法 :
var_export(变量, 是否返回字符串)。 -
示例 :
php$list = ['张三', '李四', '王五']; var_export($list); // 输出结果(可直接复制到代码中使用): // array ( 0 => '张三', 1 => '李四', 2 => '王五', ) // 结合 <pre> 格式化 echo "<pre>"; var_export($list); echo "</pre>";
二、特殊场景打印
1. 调试时打印到日志文件(避免页面干扰)
适合生产环境调试(不影响用户界面),通过 file_put_contents() 将打印内容写入日志文件:
php
// 定义日志文件路径
$logFile = './debug.log';
// 要打印的变量
$list = $this->allEmployeeList();
// 拼接日志内容(包含时间戳)
$logContent = date('Y-m-d H:i:s') . " - ";
$logContent .= var_export($list, true) . "\n\n"; // 第二个参数为 true,返回字符串
// 写入日志文件(FILE_APPEND 表示追加内容,避免覆盖)
file_put_contents($logFile, $logContent, FILE_APPEND);
2. 打印到控制台(CLI 模式)
如果通过命令行(CLI)运行 PHP 脚本,echo、print_r()、var_dump() 会直接输出到控制台,适合脚本调试:
php
// 脚本文件:test.php
$list = ['张三', '李四', '王五'];
var_dump($list);
// 命令行执行:php test.php
// 控制台输出:array(3) { [0]=> string(6) "张三" [1]=> string(6) "李四" [2]=> string(6) "王五" }
3. 打印多维数组/复杂对象(清晰格式化)
对于多层嵌套的数组或对象,用 json_encode() 格式化输出(需开启 JSON_PRETTY_PRINT 选项):
php
$complexData = [
'company' => 'XX科技',
'depts' => [
[
'name' => '技术部',
'employees' => ['张三', '李四']
],
[
'name' => '人事部',
'employees' => ['王五', '赵六']
]
]
];
// JSON 格式化输出(页面查看更清晰)
echo "<pre>";
echo json_encode($complexData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo "</pre>";
JSON_UNESCAPED_UNICODE:避免中文转义(如\u5f20\u4e09)。JSON_PRETTY_PRINT:格式化输出(换行、缩进)。
三、常用打印技巧
1. 调试时快速区分打印内容
用分隔符包裹打印结果,避免多个变量输出混淆:
php
echo "===== 打印员工列表 =====" . "<br>";
print_r($list);
echo "<br>" . "===== 打印结束 =====" . "<br>";
2. 打印后终止脚本执行
调试时,打印变量后用 die() 或 exit() 终止脚本,避免后续代码干扰:
php
$list = $this->allEmployeeList();
var_dump($list);
die(); // 终止脚本
// 后续代码不会执行
3. 避免 null/false 打印无结果
echo 打印 null、false 时会显示空值,可结合 var_dump() 或判断后输出:
php
$salary = null;
echo $salary; // 无输出
var_dump($salary); // 输出 NULL,更清晰
四、总结
| 函数 | 适用场景 | 核心优势 |
|---|---|---|
echo |
页面输出字符串、变量 | 速度快,支持多值输出 |
print_r() |
调试数组、对象 | 格式清晰,可读性强 |
var_dump() |
精准调试(类型+值+长度) | 显示数据类型,适合排错 |
var_export() |
复用数组/对象代码 | 输出可执行 PHP 代码 |
| 日志打印 | 生产环境调试 | 不影响用户,留存调试记录 |
推荐组合
- 页面输出简单内容:用
echo。 - 调试数组/对象:用
print_r($var)或var_dump($var)+<pre>标签。 - 生产环境调试:用日志打印(
file_put_contents()+var_export())。