调试代码之 dd VS var_dump VS print_r ?
在浏览器中显示变量查找错误,是在 PHP 中最流行的调试方式之一。Laravel 为显示变量提供了 辅助函数 dd()
,这代表「Dump and Die」,我基本上都在用这个,可是时常也会觉得很不方便。
首先,我们先看看 dd()
有什么问题?比如我们想从 DB 表中获取内容并打印它们:
$comment = TicketComment::take(10)->all();
dd($comment);
然后你会先看到这个:
点击展开来:
再展开其中一个:
如果你想看到属性值(attributes)或者原始值(original)的时候,你还得在点击一次才能看到。没错,这个过程我们一共用鼠标点击了三次~
var_dump() and die()
传统 PHP 打印任何类型的数据是这样的:
$comment = TicketComment::take(10)->get();
var_dump($comment);
die();
显示出来是这样的:
可是这样的方法看上去并不是很直观,不是么?
print_r()
PHP 内置函数 print_r 的描述是「打印关于变量的易于理解的信息」,所以我们试一下这种:
$comment = TicketComment::take(10)->get();
print_r($comment);
die();
然后你看到的就会是这样
都挤在一堆了这怎么看呢?我的一个同事教我在程序中加入 echo "<pre>";
$comment = TicketComment::take(10)->get();
echo "<pre>";
print_r($comment);
die();
好让它看上去能这样:
但这样的方法,我还是很嫌弃。我尝试用过 Kint 来调试,但,其实也不怎么方便。
所以敢问大伙儿,你们平时都是怎么调试的?
简单就 var_dump + exit/die
复杂就 PhpStorm + xdebug
@MrJing sublime 重度使用病患怎么破:joy:
@JokerLinly PhpStorm 大法好啊
想看什么数据就输出什么数据,这样一股脑都打印出来,用什么调试都不会方便的
多好啊
打 Log 呀
@JokerLinly 琳姐的 sublime 常用的 package 有哪些啊?
@蜗牛 终于有人问我这个问题了,你等着,我明天给你写一个
@JokerLinly 好的,给琳姐一个大大的赞 :+1:
@JokerLinly :laughing:我也想知道~关于常用package
转换成json 看吧
print_r + die复杂的用xdebug
@dividez 对还是json最直观,配合json格式化插件
priny_r + 查看网页源代码

期待你的 sublime package 推荐 ^_^
@际遇 @wangroute @蜗牛 来啦:laughing: 安利一些好用的 Sublime 插件
@JokerLinly 玲姐最棒了,O(∩_∩)O哈哈~:smile:
@蜗牛 我是琳我是琳
@JokerLinly 抱歉,好像一直打错
@Insua
var_dump()
以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。var_dump()
以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。刚学php时写了一个全局函数:
排查问题,还是xdebug更好一点。
@Openset
就是我上面写的这种哩~
@JokerLinly 是的,写成函数调用方便。
自定义 var_dump 样式也不错 https://pigjian.com/article/vardumper :laughing:
看你好几篇文章了,原来是个妹子。膜拜膜拜!
哈哈;看来不止我一个懒人啊;

原本的 dump 打印一个模型是这样的;
大多时候我们只是想要看 name 和 email ;
结果给我们搞了这么一大堆属性;
于是我动手改造了个 扩展包 ;
https://github.com/baijunyao/laravel-print
安装 ;
需要打印的时候使用
p($data)
代替dump($data)
;使用
pd($data)
代替dd($data)
;效果是这样的:
xdebug大法好
http://www.laruence.com/2010/06/21/1608.ht...
2010年 黑夜路人 曾经专门总结过《PHP调试技术手册》一文,冠以鸟哥之名。 算是个官方推荐吧。