📜  如何在PHP获取调用函数/方法的名称?

📅  最后修改于: 2022-05-13 01:54:11.198000             🧑  作者: Mango

如何在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 个函数。