PHP 调试函数

By | 2016年9月2日 | 阅读:289 次

写在前边
在 Google 时候无意中发现了一份 PHP 的调试手册,在鸟哥的博客上有详情:PHP调试技术手册,自知是菜鸡,遂学之;


  1. 使用 5 个内置调试函数
  2. 使用魔术常量调试
  3. 建立堆栈跟踪调试

1. 使用内置调试函数

PHP 内置常用的调试函数有:echoprintprint_r()var_dump()

1.1 语法检查

1.2 echoprint

  • echo 是 PHP 的语言结构(更常用)
    • 有别于系统函数,它不需要使用 () 来指明参数,用单引号,双引号均可;
    • 给 echo 传递多个参数时不能使用 echo()
    • 快捷用法:statements <?=$var?> 相当于 statements <?php echo $var ?>
  • print 也是 PHP 的语言结构
    • print 相比 echo,只支持输出一个参数;
  • 调试使用:用于输出变量值,比如确定分支的走向;

1.3 print_r()var_dump()var_export()

  • print_r( $var [, bool $return])
    • 第二个参数为 TRUE 时,不打印结果,将 return 输出信息;
    • 打印变量值;数组按 key => value 格式打印,常常配合 <pre></pre> 在浏览器中格式化输出变量;
    • 对于 print_r,值为 NULLFALSE ,输出为空;

  • var_dump($var)
    • 输出表达式结构信息,包括表达式的类型与值;数组会按递归展开值,缩进显示结构;

  • var_export($var [, bool $return])
    • 第二个参数为 TRUE 时,不打印结果,将 return 变量的值,可直接作为 PHP 代码使用;


2. 使用魔术常量调试

魔术常量保存着当前 PHP 脚本运行时的状态,可以在调试时按需输出;

魔术常量名 返回值
__DIR__ 当前脚本所在目录
__FILE__ 当前脚本所在目录及文件名
__NAMESPACE__ 当前脚本的命名空间
__LINE__ 输出 __LINE__ 的行
__CLASS__ 所在类的类名
__FUNCTION__ 函数名
__METHOD__ 类的成员方法名


3. 建立堆栈跟踪调试

3.1 debug_zval_dump()

  • 参考:手册;输出结果与 var_dump() 类似,但增加的字段 refcount 能记录变量的引用次数;举个栗子:

3.2 debug_backtrace()

  • 参考:手册;输出结果产生一条回溯跟踪,第一个数组元素是当前堆栈的状态,之后元素是其他堆栈状态,之后的元素堆栈来自于 include 的脚本、函数调用…;举个栗子:

  • 自定义格式输出

3.3 debug_print_backtrace()

  • 格式化输出的 debug_backtrace(),类似于上边的 pr_backtrace()


后记
PHP 调试还会用到 XDebug、日志分析等,后边写两篇文章学习写 233

Category: PHP

发表评论

电子邮件地址不会被公开。