var_dump 是 php 调试首选函数,因其明确标出变量类型、值和结构;需用 格式化输出,避免生产环境泄露敏感信息,注意 xdebug 截断限制及 __debuginfo() 的干扰。

var_dump 是 PHP 调试中最常用函数,因为它能一次性告诉你三件事:**这是什么类型、值是多少、结构长什么样**。其他函数做不到这么直给。
为什么不用 print_r 或 echo?
echo 只能输出字符串或数字,遇到数组、对象直接报 Array to string conversion 错误;print_r 虽能展开数组,但不标类型——你看到 1 不知道是 int 还是 string,看到空数组也不清楚是 [] 还是 null。var_dump 明确写出 int(1)、string(5) "hello"、array(0) {},省去猜类型的时间。
var_dump 输出太乱?必须加 <pre class="brush:php;toolbar:false;"></pre>
浏览器默认把换行和缩进当空格处理,var_dump 的递归结构会糊成一团。不加格式化标签,嵌套两层就看不清键值对。
- 正确写法:
echo '<pre class="brush:php;toolbar:false;">'; var_dump($data); echo '</pre>'; - 更稳妥的封装:
function vd($v) { echo '<pre class="brush:php;toolbar:false;">'; var_dump($v); echo '</pre>'; } - 注意:别在生产环境用,尤其别对用户数据直接
var_dump,密码、token 会原样暴露
Xdebug 会让 var_dump 截断?改配置
装了 Xdebug 后,默认只展开 3 层嵌套(xdebug.var_display_max_depth=3),深层数组或对象属性被显示为 ... (length=xxx),实际内容看不到。
- 查当前限制:
ini_get('xdebug.var_display_max_depth') - 临时提高:
ini_set('xdebug.var_display_max_depth', '10'); - 永久修改:在
xdebug.ini加一行xdebug.var_display_max_depth=10 - 没装 Xdebug?原生
var_dump也会递归到底,但大对象可能卡浏览器
想捕获输出而不是直接打印?用输出控制函数
有时你要把 var_dump 结果存成字符串做日志、拼进邮件,或避免干扰 JSON 接口返回。
- 标准做法:
$output = ''; ob_start(); var_dump($data); $output = ob_get_clean(); - 注意:
ob_get_clean()会清空缓冲区并返回内容,别漏掉这一步 - 如果用了
die或exit中断流程,记得先ob_end_flush()或ob_end_clean()防止缓冲区残留
var_dump 对 __debugInfo() 的响应**。自定义类如果实现了这个魔术方法,var_dump 就只输出它返回的数组,而不是真实属性——调试时以为字段丢了,其实是被拦截了。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











