Pau*_*xon 184
请参阅debug_backtrace - 这可以跟踪您的调用堆栈一直到顶部.
这是你如何得到你的来电者:
$trace = debug_backtrace();
$caller = $trace[1];
echo "Called by {$caller['function']}";
if (isset($caller['class']))
echo " in {$caller['class']}";
Run Code Online (Sandbox Code Playgroud)
sva*_*ssr 16
Xdebug提供了一些不错的功能.
<?php
Class MyClass
{
function __construct(){
$this->callee();
}
function callee() {
echo sprintf("callee() called @ %s: %s from %s::%s",
xdebug_call_file(),
xdebug_call_line(),
xdebug_call_class(),
xdebug_call_function()
);
}
}
$rollDebug = new MyClass();
?>
Run Code Online (Sandbox Code Playgroud)
将返回痕迹
callee() called @ /var/www/xd.php: 16 from MyClass::__construct
Run Code Online (Sandbox Code Playgroud)
要在ubuntu上安装Xdebug,最好的方法是
sudo aptitude install php5-xdebug
Run Code Online (Sandbox Code Playgroud)
您可能需要先安装php5-dev
sudo aptitude install php5-dev
Run Code Online (Sandbox Code Playgroud)
MAN*_*OPE 15
这是很晚但我想分享将给出调用当前函数的函数名称的函数.
public function getCallingFunctionName($completeTrace=false)
{
$trace=debug_backtrace();
if($completeTrace)
{
$str = '';
foreach($trace as $caller)
{
$str .= " -- Called by {$caller['function']}";
if (isset($caller['class']))
$str .= " From Class {$caller['class']}";
}
}
else
{
$caller=$trace[2];
$str = "Called by {$caller['function']}";
if (isset($caller['class']))
$str .= " From Class {$caller['class']}";
}
return $str;
}
Run Code Online (Sandbox Code Playgroud)
我希望这会有用.
echo debug_backtrace()[1]['function'];
Run Code Online (Sandbox Code Playgroud)
或优化(例如,对于非调试用例):
echo debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'];
Run Code Online (Sandbox Code Playgroud)
第一个参数阻止填充未使用的函数参数,第二个参数将跟踪限制为两个级别(我们需要第二个).
做到这一点并自己使用它
/**
* Gets the caller of the function where this function is called from
* @param string what to return? (Leave empty to get all, or specify: "class", "function", "line", "class", etc.) - options see: http://php.net/manual/en/function.debug-backtrace.php
*/
function getCaller($what = NULL)
{
$trace = debug_backtrace();
$previousCall = $trace[2]; // 0 is this call, 1 is call in previous function, 2 is caller of that function
if(isset($what))
{
return $previousCall[$what];
}
else
{
return $previousCall;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78824 次 |
| 最近记录: |