PHP var_dump 和 print_r 区别
在日常做网站调试时,你可能经常需要看看代码里存的变量到底是啥样子——比如用户填的表单内容、从数据库取出来的数据,都是看不见摸不着的。这时候,PHP 里有两个“看变量工具”:var_dump 和 print_r。虽然都是用来查看变量的,但就像家里的手电筒和放大镜,用处和看出来的样子不一样。
先看打印的“细节程度”
想象你手里有个装着东西的抽屉,var_dump 就像是把抽屉里的东西连包装、大小、重量都给你列得清清楚楚,print_r 则更像是把东西倒出来,只给你看里面的内容。

举个例子:如果变量是一个存了“苹果”的字符串,var_dump 会直接告诉你它是字符串类型,还有长度,就像这样:string(5) "苹果";要是变量是个有3个元素的数组,比如存了“香蕉、橘子、葡萄”,var_dump 会把每个元素的类型和细节都标出来,比如array(3) { [0]=> string(6) "香蕉" [1]=> string(6) "橘子" [2]=> string(6) "葡萄" }。而 print_r 只会告诉你这是数组,里面的内容是什么,不会说类型和长度,比如Array ( [0] => 香蕉 [1] => 橘子 [2] => 葡萄 ),看起来简洁,少了不少信息。
再看能不能直接用在调试里
var_dump 还有个 print_r 没有的本事——它能同时打出多个变量的信息,不用重复写代码。比如你要同时看用户名和用户年龄,var_dump 直接写var_dump($username, $age)就行,print_r 就得分别写两次print_r($username)和print_r($age),麻烦一点。
而且 var_dump 会自动把变量的“边界”标清楚,比如如果变量是个布尔值(就是真或假),它会显示bool(true)或bool(false),你一眼就知道这个变量是真的还是假的,不会像 print_r 那样,要是存的是布尔值 false,它可能就直接显示空,你分不清是变量本身空,还是 print_r 没打出来细节。
最后说对“可读性”的影响
要是你只是想快速看看数组或对象里的内容,不想被类型和长度的信息打扰,print_r 就很合适。比如你写了个购物车数组,想快速看看里面有啥商品,print_r 输出的格式更像普通的列表,一眼就能扫出来内容。但要是你在找 bug——比如明明应该是个数字,结果变成了字符串,var_dump 就能第一时间告诉你类型错了,这是 print_r 做不到的。
简单总结一下:var_dump 是“详细调试工具”,适合找问题、看变量的完整信息;print_r 是“快速查看工具”,适合只想知道内容、不想看细节的时候。下次调试的时候,别再乱用了,根据你的需求选对工具,能少走不少弯路。