var_dump 是调试主力,能显示完整类型、长度及资源类型,print_r 仅展示结构和值,var_export 返回可执行php代码但不支持资源。

print_r 输出数组时看不到数据类型
它只展示结构和值,比如 print_r([1, "hello", null]) 会输出:Array ( [0] => 1 [1] => hello [2] => )
整数、字符串、null 全部混在一起显示,没有类型标识。对调试类型敏感的逻辑(比如 if ($x === null))容易误判。
var_dump 显示完整类型与长度信息
var_dump 是调试真·主力,每个值都带类型前缀和长度(字符串)或字节数(二进制数据):var_dump([1, "hello", null]) 输出:array(3) { [0]=> int(1) [1]=> string(5) "hello" [2]=> NULL }
关键点:
- 字符串明确标出
string(5),避免因空格、不可见字符导致长度误判 -
NULL全大写无引号,和字符串"null"严格区分 - 嵌套层级用缩进+花括号展开,对象属性含
private/protected修饰符
资源类型(resource)处理方式不同
打开文件、数据库连接这类资源,三者表现差异明显:
- print_r($fp) → Resource id #5(仅编号,无法判断类型)
- var_dump($fp) → resource(5, stream)(含资源类型名,可定位问题)
- var_export($fp) → 直接返回 NULL(不支持导出资源,慎用)
遇到 Warning: var_export does not handle circular references 或资源报错,优先换 var_dump。
捕获输出时 return 参数行为一致但用途不同
三者都支持第二个参数设为 true 返回字符串而非直接输出:$str = print_r($arr, true);$str = var_dump($arr, true);(PHP 5.6+ 支持)
但注意:var_export 返回的是合法 PHP 代码(可 eval),而 print_r 和 var_dump 返回的是纯文本——后者不能直接复用为变量定义。
实际调试时,别图省事只用 print_r 看数组;只要涉及类型判断、资源排查、接口响应字段验证,var_dump 的输出信息差一个字都可能绕半天弯路。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











