我可以从被调用函数中访问调用环境的范围吗?
例如,我想在日志函数中访问 __LINE__
,但它必须是来自调用环境的 __LINE__
。我还想通过某种方式调用 get_defined_vars()
来获取调用者变量。
在这两个示例中,它都不需要额外的参数。
这可能吗?
最佳答案
无法获取调用者的变量,但您可以获取他们的参数。这很容易用 debug_backtrace()
完成:
<?php
class DebugTest
{
public static function testFunc($arg1, $arg2) {
return self::getTrace();
}
private static function getTrace() {
$trace = debug_backtrace();
return sprintf(
"This trace function was called by %s (%s:%d) with %d %s: %s\n",
$trace[1]["function"],
$trace[1]["file"],
$trace[1]["line"],
count($trace[1]["args"]),
count($trace[1]["args"]) === 1 ? "argument" : "arguments",
implode(", ", $trace[1]["args"])
);
}
}
echo DebugTest::testFunc("foo", "bar");
运行这个程序,我们得到这个输出:
This trace function was called by testFunc (/Users/mike/debug.php:23) with 2 arguments: foo, bar
debug_backtrace()
返回一个数组;元素 0 是调用函数本身的函数,因此我们在示例中使用元素 1。您可以使用循环一直沿轨迹返回。
关于php - 在 PHP 函数中获取调用范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697384/