我知道函数debug_backtrace,但我正在寻找一些准备使用函数的实现,如GetCallingMethodName()?如果它也给出了方法的类(如果它确实是一个方法),那就太完美了。
当前回答
我所见过的这个问题的最佳答案是:
list(, $caller) = debug_backtrace(false);
简洁明了
其他回答
我最喜欢的方式,一句话!
debug_backtrace()[1]['function'];
你可以这样使用它:
echo 'The calling function: ' . debug_backtrace()[1]['function'];
注意,这只与去年发布的PHP版本兼容。但出于安全考虑,让PHP保持最新是一个好主意。
我需要一些东西来列出调用类/方法(在Magento项目上工作)。
虽然debug_backtrace提供了大量有用的信息,但它为Magento安装提供的信息量是压倒性的(超过82,000行!)因为我只关心调用函数和类,所以我想出了这个小解决方案:
$callers = debug_backtrace();
foreach( $callers as $call ) {
echo "<br>" . $call['class'] . '->' . $call['function'];
}
我所见过的这个问题的最佳答案是:
list(, $caller) = debug_backtrace(false);
简洁明了
对我来说,debug_backtrace达到了内存限制,我想在生产中使用它来记录和发送发生的错误。
相反,我发现这个解决方案非常有效!
// Make a new exception at the point you want to trace, and trace it!
$e = new Exception;
var_dump($e->getTraceAsString());
// Outputs the following
#2 /usr/share/php/PHPUnit/Framework/TestCase.php(626): SeriesHelperTest->setUp()
#3 /usr/share/php/PHPUnit/Framework/TestResult.php(666): PHPUnit_Framework_TestCase->runBare()
#4 /usr/share/php/PHPUnit/Framework/TestCase.php(576): PHPUnit_Framework_TestResult->run(Object(SeriesHelperTest))
#5 /usr/share/php/PHPUnit/Framework/TestSuite.php(757): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#6 /usr/share/php/PHPUnit/Framework/TestSuite.php(733): PHPUnit_Framework_TestSuite->runTest(Object(SeriesHelperTest), Object(PHPUnit_Framework_TestResult))
#7 /usr/share/php/PHPUnit/TextUI/TestRunner.php(305): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult), false, Array, Array, false)
#8 /usr/share/php/PHPUnit/TextUI/Command.php(188): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), Array)
#9 /usr/share/php/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#10 /usr/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#11 {main}"
debug_backtrace()函数是知道这一点的唯一方法,如果你很懒,这是你应该自己编写GetCallingMethodName()的另一个原因。战胜懒惰!: D
推荐文章
- 编写器更新和安装之间有什么区别?
- 为什么Android工作室说“等待调试器”如果我不调试?
- 本地机器上的PHP服务器?
- 如何评论laravel .env文件?
- 在PHP中检测移动设备的最简单方法
- 如何在树枝模板中呈现DateTime对象
- 如何删除查询字符串,只得到URL?
- 您是否可以“编译”PHP代码并上传一个二进制文件,该文件将由字节码解释器运行?
- 非法字符串偏移警告PHP
- 从数组中获取随机项
- 没有找到用于调试模式的此可执行文件的有效配置文件
- 为什么一个函数检查字符串是否为空总是返回true?
- Visual Studio c++和Windows中的调试内存填充模式是什么?
- 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?
- 如何增加php的最大执行时间