PHP 调试技巧之研修

更新日期: 2019-04-19 阅读次数: 6406 字数: 517 分类: PHP

最近调试 ecshop, 越发觉得自己的 PHP 调试技能不足,定位问题效率不够高。所以决定建个专题,把解决问题过程中学到的调试技巧记录一下

var_dump

页面中输出 array 很方便调试。但是,var_dump 的输出是没有排版的,也就是“一行流”,当要查看的信息量很大时,定位是件异常痛苦的事情。例如:

$a = array ("laravel", "php", array ("vuejs", "angularjs", "reactjs"));
var_dump($a);

// 输出结果
array(3) { [0]=> string(7) "laravel" [1]=> string(3) "php" [2]=> array(3) { [0]=> string(5) "vuejs" [1]=> string(9) "angularjs" [2]=> string(7) "reactjs" } }

查到一种更方便的调试方式,如下

$a = array ("laravel", "php", array ("vuejs", "angularjs", "reactjs"));
echo '<pre>' . var_export($a, true) . '</pre>';

// 输出结果
array (
  0 => 'laravel',
  1 => 'php',
  2 => 
  array (
    0 => 'vuejs',
    1 => 'angularjs',
    2 => 'reactjs',
  ),
)

显然使用 var_export 这种方式输出的调试信息更具有可读性。于是,我在 vim snippets 中将 var_dump 映射到了 var_export 的这种方式。

error_log 写入本地日志文件

$logofile ='debug.log';
error_log("volunm price: ".$volume_price, 3, $logofile);
error_log("\n", 3, $logofile);

注意,日志输出后加入换行符,否则格式混乱。

error_log 的文档

error_log — Send an error message to the defined error handling routines

bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

3	message is appended to the file destination. A newline is not automatically added to the end of the message string.

error_log 记录 array

$logofile ='debug.log';
error_log(print_r($price_list, true), 3, $logofile);
error_log("\n", 3, $logofile);

如果不加 print_r , 会显示成 Array,不显示具体的数据。

输出效果

Array
(
    [0] => Array
        (
            [number] => 10
            [price] => 9.00
            [format_price] => ¥9元
        )

)

print_r 的使用文档

print_r — Prints human-readable information about a variable
所以,r 大概是 readable 的缩写。

第二个参数,When this parameter is set to TRUE, print_r() will return the information rather than print it.

Laravel 中记录 object 日志

Log::info(print_r($result, true));

[2019-04-19 09:11:40] production.INFO: stdClass Object
(
    [Recommend] => https://error-center.aliyun.com/status/search?Keyword=MissingPhoneNumbers&source=PopGw
    [Message] => PhoneNumbers is mandatory for this action.
    [RequestId] => xxxx
    [HostId] => dysmsapi.aliyuncs.com
    [Code] => MissingPhoneNumbers
)

参考

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年08月15日 日本投降日
2020年08月22日 处暑
2020年08月25日 七夕
2020年09月02日 中元节
2020年09月03日 抗日胜利纪念日
2020年09月07日 白露
2020年09月08日 国际扫盲日
2020年09月10日 教师节
2020年09月16日 国际臭氧层保护日
2020年09月16日 世界清洁地球日
2020年09月18日 "九一八"事变纪念日
2020年09月20日 国际爱牙日
查看更多节日