如何在PHP获取调用函数/方法的名称?
为什么需要获取调用函数的名称?
代码由执行不同任务但彼此直接或间接关联的多个函数组成,并且突然在某些函数中显示错误,然后有必要找到发生错误的函数的名称。
方法:
- 声明一个用户定义的函数CallingFunctionName() ,它将充当调试器函数(它跟踪脚本中的另一个函数)。
- 使用“new”关键字创建 Exception 类的引用。
- 现在使用这个引用变量调用内置函数getTrace() (它是 Exception 类的成员函数)。
- 取由getTrace()函数中的任何变量(getTrace()函数返回关联数组)的返回值。
- 使用 print_r()函数打印该变量。
- 创建一个或多个用户定义的函数来测试跟踪函数。
示例 1:
getTrace();
// Position 0 would be the line
// that called this function
$final_call = $trace[1];
// Display associative array
print_r($final_call);
}
// Declare firstCall() function
function firstCall($x, $y) {
// Call secondCall() function
secondCall($x, $y);
}
// Declare secondCall() function
function secondCall($x, $y) {
// Call CallingFunctionName()
// function
CallingFunctionName();
}
// Call firstCall() function
firstCall('test', 'php');
?>
输出:
Array
(
[file] => /home/5aeb55f2023e4e59fedcedc30e37e060.php
[line] => 26
[function] => secondCall
[args] => Array
(
[0] => test
[1] => php
)
)
说明: getTrace()函数将扫描整个方法调用堆栈并以关联数组的形式存储所有信息。关联数组携带以下信息。
- [file]:当前PHP文件的绝对路径。
- [line]:函数“CallingFunctionName()”的行号。
- [函数]:携带调用函数的名称。
- [args]:给出调用函数的参数值。
在第 15 行,将值 1 作为 trace[] 的下标传递,因此它返回堆栈中最上面函数的所有信息。
示例 2:
getTrace();
// Position 0 would be the line
// that called this function
$final_call = $trace[2];
// Display associative array
print_r($final_call);
}
// Declare firstCall() function
function firstCall($x, $y) {
// Call secondCall() function
secondCall($x, $y);
}
// Declare secondCall() function
function secondCall($x, $y) {
// Call CallingFunctionName()
// function
CallingFunctionName();
}
// Call firstCall() function
firstCall('test', 'php');
?>
输出:
Array
(
[file] => /home/1b5518d5af0615813238e7534ccb6e8a.php
[line] => 38
[function] => firstCall
[args] => Array
(
[0] => test
[1] => php
)
)
说明:输出包含函数firstcall()的所有信息,因为下标trace的值为2。
- trace[0]:位置 0 将是函数本身(此处为 CallingFunctionName())。
- trace[1]:位置 1 将是函数secondcall,因为这是调用堆栈中最顶部的函数。
- trace[2]:位置 2 将是函数“firstcall”,因为这是调用堆栈中的前 1 个函数。
- trace[n]:位置 n 将是第 n 个函数,因为这是调用堆栈中的第 n 个函数。