前言

在我们调试程序过程中,往往可能会出现需要回溯跟踪一个方法,这里我就介绍两个比较不错的PHP函数,也是我经常使用的。

内容

(PHP 4 >= 4.3.0, PHP 5, PHP 7)
debug_backtrace — 产生一条回溯跟踪(backtrace)

(PHP 5, PHP 7)
debug_print_backtrace — 打印一条回溯。

这两个看起来有点相似,其实功能也是差不多的,下面我就以一个简单的例子向大家演示下他们的使用。

实例

<?php
/**
 * PHP回溯
 * @author chenyanphp@qq.com
 */
header("Content-Type:text/html;charset=utf-8");

/**
 *
 * 调试函数
 * @param $content
 */
function dump($content)
{
    echo '<pre>';
    var_dump($content);
    echo '</pre>';
}

/**
 * Class A
 */
class A
{
    public function say()
    {
        // 这里打印回溯内容
        dump(debug_backtrace());
        // 调用本身方法打印
        debug_print_backtrace();
        echo '<br>';
        echo 'Hello World!';
    }
}

/**
 * Class B
 */
class B
{
    public function sayB(A $obj)
    {
        $obj->say();
    }
}

/**
 * 测试结果
 */
$a = new A();
$b = new B();
$b->sayB($a);

下面是运行结果:

array(2) {
  [0]=>
  array(7) {
    ["file"]=>
    string(29) "D:\phpStudy\WWW\test\test.php"
    ["line"]=>
    int(43)
    ["function"]=>
    string(3) "say"
    ["class"]=>
    string(1) "A"
    ["object"]=>
    object(A)#1 (0) {
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(0) {
    }
  }
  [1]=>
  array(7) {
    ["file"]=>
    string(29) "D:\phpStudy\WWW\test\test.php"
    ["line"]=>
    int(52)
    ["function"]=>
    string(4) "sayB"
    ["class"]=>
    string(1) "B"
    ["object"]=>
    object(B)#2 (0) {
    }
    ["type"]=>
    string(2) "->"
    ["args"]=>
    array(1) {
      [0]=>
      object(A)#1 (0) {
      }
    }
  }
}
#0 A->say() called at [D:\phpStudy\WWW\test\test.php:43] #1 B->sayB(A Object ()) called at [D:\phpStudy\WWW\test\test.php:52] 
Hello World!

结合代码不难看出,他们着重返回结果集,拆分结构;另一个着重按调用顺序打印出回溯跟踪。

总结

内容就这么多,结果一目了然,其他自己测试下就明了了。

PHP有些方法还是挺不错的,大家平时可以多看看手册。

下面放了他们两的官方链接,有兴趣的可以点击详细看看。

debug_backtrace
debug_print_backtrace


青叶
1.5k 声望112 粉丝

一个phper