PHP 全链路嵌套方法层级追踪之debug_backtrace() 函数
前言:在项目开发中,某个功能的实现可能连续嵌套调用的多个公共方法,这个时候想排查整个链路调用了什么方法?都在什么位置调用,我们该如何操作呢?
首先想到的可能时使用打印全局变量$_SERVER,但此函数只是打印出初始调用的方法名。其实PHP已经提供了对应的堆栈链路函数:debug_backtrace() 函数
debug_backtrace() 函数
函数定义:
debug_backtrace() 函数生成 backtrace。
该函数显示由 debug_backtrace() 函数代码生成的数据。
返回一个关联数组。下面是可能返回的元素:
名称 | 类型 | 描述 |
---|---|---|
function | string | 当前的函数名。 |
line | integer | 当前的行号。 |
file | string | 当前的文件名。 |
class | string | 当前的类名。 |
object | object | 当前对象。 |
type | string | 当前的调用类型,可能的调用:
|
args | array | 如果在函数中,列出函数参数。如果在被引用的文件中,列出被引用的文件名。 |
函数用法:
#获取全链路链路调用中的方法和所在行数
$array = debug_backtrace(); foreach ($array as $row) { $info[] = $row['file'] . ':' . $row['line'] . '行,调用方法:' . $row['function']; } var_dump( $info);
结果如图: