如何获取来电者的方法名

时间:2015-12-18 16:22:17

标签: php

所以,我正在寻找如何获取来电者的方法名称。我从来没有看过它,也不知道它是否存在。

示例:

<?php 
  class father {
    public function db_select(){
      echo method that call me;
    }
  }

  class plugin extends father {
    public function select_plugin(){
      $query = $this->db_select();
    }
   }

?>

我想要的只是在db_select()内编写调用db_select()方法的方法名称。

2 个答案:

答案 0 :(得分:4)

我认为debug_backtrace可以解决问题。

它为您提供函数调用的回溯。观察此结果,然后您必须弄清楚如何获取所需的函数名称。但信息就在那里。

hg update -r 'tag("1-2-2")'

答案 1 :(得分:0)

免责声明:我不使用PHP。

@Jean Victor - 如果您(a)更详细地解释为什么要这样做以及(b)分享有关PHP平台的一些信息,这将有所帮助。

&#34; Caller Information (C# and Visual Basic)&#34;

&#34; 通过使用“来电者信息”属性,您可以获取有关方法调用者的信息。您可以获取源代码的文件路径,源代码中的行号以及调用者的成员名称。此信息有助于跟踪,调试和创建诊断工具。&#34;

不幸的是,利用此功能可能是PHP的主要挑战。

首先,如果您使用的是.NET平台,则必须发现您使用的PHP版本是否利用了System.Runtime.CompilerServices Namespace,因为它&#34; 为编译器提供了功能使用托管代码指定元数据中影响公共语言运行库的运行时行为的属性的编写者&#34;。

替代方案:使用丑陋的kludge(仅适用于您拥有或可以修改的功能)。

确保所有函数的第一个参数是GUID。

# id of  myFunctionABC f4f866c7728040a6bf22c7600c64a7ee
function myFunctionABC ($whoCalledMe) {

# Note:  myFunctionABC would use the value passed
#        via $whoCalledMe in error messages.



# BUT if from within myFuntionABC some other
# function is called, the above GUID would be used:
#
#     foo("f4f866c7728040a6bf22c7600c64a7ee")

}

是的,它是一个非常非常难看的kludge FWIW

修改
当我写这篇文章时,我不知道 debug_backtrace debug_backtrace 也适用于非.NET平台 结束编辑。