写给thinkphp开发者的laravel系列教程(九)打印数据

php这种脚本语言调试起来是很方便的;
大多时候看报错打印一下数据就知道问题所在了;
php 内置了常用打印函数 printvar_dump
但是打印出来的样式实在让人目瞪狗呆;
thinkphp 框架自带一个 dump 函数;
看过上篇文章的童鞋会懂我的;
除非是需要查看数据的类型等更详细数据;
否则平常开发我是不用框架的打印函数;
laravel 也是有一个dump 函数的;
这个打印出来就漂亮多了;
laravel dump
跟我那个 p 函数一样的简洁而且还带颜色;
从数据库取出来的数据是一个 Collection 对象;
如果拿它打印 Collection 那就痛苦了;

默认都是折起来;
需要我们点下箭头按钮才会展开;
这里有个小技巧;
ctrl/command+鼠标左键点击下箭头可以展开全部;
其实大多时候我们只想看 attributes 里面的数据;
作为一个有简洁癖好的懒人;
让我每次打印数据都得点击展开;
而且还显示一大堆我并不在意的数据;
我是相当不能忍的;
给的再多;不如懂我;
于是在 laravel 中我的 p 函数就升级了;

if (!function_exists('p')) {
    // 传递数据以易于阅读的样式格式化后输出
    function p($data, $toArray = true)
    {
        // 定义样式
        $str = '<pre style="display: block;padding: 9.5px;margin: 44px 0 0 0;font-size: 13px;line-height: 1.42857;color: #333;word-break: break-all;word-wrap: break-word;background-color: #F5F5F5;border: 1px solid #CCC;border-radius: 4px;">';
        // 如果是 boolean 或者 null 直接显示文字;否则 print
        if (is_bool($data)) {
            $show_data = $data ? 'true' : 'false';
        } elseif (is_null($data)) {
            // 如果是null 直接显示null
            $show_data = 'null';
        } elseif (is_object($data) && in_array(get_parent_class($data), ['Illuminate\Support\Collection', 'App\Models\Base']) && $toArray) {
            // 把一些集合转成数组形式来查看
            $data_array = $data->toArray();
            $show_data = '这是被转成数组的Collection:<br>' . print_r($data_array, true);
        } elseif (is_object($data) && in_array(get_class($data), ['Maatwebsite\Excel\Readers\LaravelExcelReader']) && $toArray) {
            // 把一些集合转成数组形式来查看
            $data_array = $data->toArray();
            $show_data = '这是被转成数组的Collection:<br>' . print_r($data_array, true);
        } elseif (is_object($data) && in_array(get_class($data), ['Illuminate\Database\Eloquent\Builder'])) {
            // 直接调用dd 查看
            dd($data);
        } else {
            $show_data = print_r($data, true);
        }
        $str .= $show_data;
        $str .= '</pre>';
        echo $str;
    }
}

打印上面的数据后的输出是这个样子的;

怎么样;
这看起来直观多了吧;
laravel 的 dump 函数是不会终止代码的;
但有些时候;
我们希望打印数据并停止往后执行;
thinkphp 中没有内置这样的函数;
laravel 比较体贴给了个 dd 函数;
那么在我这相应的写了一个 pd 函数;

if (!function_exists('pd')) {
    // 传递数据以易于阅读的样式格式化后输出并终止
    function pd($data, $toArray = true)
    {
        p($data, $toArray);
        die;
    }
}

这两个函数有了那应该放哪呢?
如果不知道;
出门左转找上一篇文章;
答案就在里面;
写给 thinkphp 开发者的 laravel 系列教程 (八) 自定义函数和类

————用来补充内容的分割线—————
后来;我的 p 函数又升级了;
现在是一个扩展包;
开源项目系列之laravel-print以简洁的方式打印数据

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共15条评论
白俊遥博客

小白大仁:1

2018-09-28 10:12:48 回复

白俊遥博客

花舞千魂殇:大佬 有时间讲讲tp的钩子和行为呗

2018-08-08 23:23:58 回复

白俊遥博客

卡卡:Nice!

2017-12-21 14:54:10 回复

白俊遥博客

、TiMi:c9da7d9664aae1a9f390d1a8003cd80b这是什么加密的MD5 大神

2017-11-23 15:02:55 回复

白俊遥博客
  • 云淡风晴 回复 、TiMi:MD5不可逆;网上搜搜彩虹表;看有你想要的没;
  • 2017-11-27 21:52:05 回复
白俊遥博客
  • 新风景 回复 云淡风晴:厉害了
  • 2018-05-23 08:17:36 回复
白俊遥博客
  • 丫丫 回复 云淡风晴:哒哒哒
  • 2018-08-09 00:20:10 回复
白俊遥博客
  • 丫丫 回复 云淡风晴:哒哒哒
  • 2018-08-09 00:20:10 回复
白俊遥博客
  • 丫丫 回复 云淡风晴:哒哒哒
  • 2018-08-09 00:20:10 回复
白俊遥博客
  • 丫丫 回复 云淡风晴:哒哒哒
  • 2018-08-09 00:20:10 回复
白俊遥博客

若只初见:32424

2017-11-04 17:52:27 回复

白俊遥博客

ysqzxf白俊遥博客

2017-10-17 17:51:15 回复

白俊遥博客

白色彩虹:感恩, 谢谢, 一直走在前方的php学长

2017-10-12 11:29:22 回复

白俊遥博客
  • 云淡风晴 回复 白色彩虹:感谢支持;
  • 2017-10-16 22:52:37 回复
白俊遥博客
  • 张三丰 回复 云淡风晴:这个博客,真心不错
  • 2017-10-28 23:19:31 回复
白俊遥博客

一路相陪白俊遥博客

2017-10-08 22:59:35 回复

白俊遥博客

lvshuocool:赞一个

2017-09-29 11:45:41 回复

白俊遥博客
  • 你是我的空气 回复 lvshuocool:test
  • 2017-09-30 16:16:22 回复
白俊遥博客
  • 二胡 回复 你是我的空气:test1
  • 2017-10-16 13:07:50 回复
白俊遥博客
  • ♚哒☜ 回复 二胡:666
  • 2017-10-24 14:44:06 回复
白俊遥博客

小财迷:我以为dump是PHP函数,小白了。。。

2017-09-28 13:00:47 回复

白俊遥博客

子任:博主,我在laravel中加入百度编辑器,如何让代码高亮显示呢,

2017-09-27 14:42:32 回复

白俊遥博客

淡淡风:感受到发光时代

2017-09-27 02:26:56 回复

白俊遥博客

土豪:666

2017-09-27 00:21:36 回复

白俊遥博客

小陈:前排~

2017-09-25 16:15:02 回复

白俊遥博客

Only Strive:666

2017-09-25 10:49:49 回复