对于 PHP测试脚本,我需要一个函数report()
来报告某些表达式的结果,例如:
report(in_array(null, $array));
report(in_array(false, $array));
# etc...
输出应如下所示:
in_array(null, $array) => false
in_array(false, $array) => true
所以我想打印表达式和结果。因此,在报告函数中,我需要一些方法来打印调用者给出的表达式:
function report($expr)
{
SOME_FUNCTION($expr)
# function I'm looking for!!
# function which would write the string 'in_array(null, $array)' to output!
echo " => ";
echo $expr;
echo "<br>";
}
是否有任何此类函数可以转储调用者给出的表达式?
我知道这不是“正常”的功能,这需要以某种方式绑定到PHP内部。但如果有debug_print_backtrace()
,__FUNCTION__
或__LINE__
之类的神奇内容,那么我认为还有一些机会......
答案 0 :(得分:3)
直接地说,没有干净的方法可以做你想做的事。
话虽如此,您可以使用debug_backtrace来获取堆栈。然后,您需要做的就是将堆栈向后移动一个(转到第二个数组元素),然后获得文件和行信息。然后,您需要解析该行以提取函数名称和输入。
不干净。这可能不容易。它不会100%可靠。但它适用于大多数情况......
这是一个实用程序功能的简单案例。只需用函数名称调用它,它就会给你函数的文字调用者:
function getArgs($func) {
$d = debug_backtrace();
$call = $d[1];
$file = file($call['file']);
$line = $file[$call['line'] - 1];
if (preg_match('(' . preg_quote($func, '(') . '\((.*)\);)', $line, $match)) {
return $match[1];
}
return $line;
}
这是一个例子:
function doSomething($arg) {
$call = getArgs(__FUNCTION__);
echo $call . ' - ' . $arg;
}
doSomething(strlen('foo'));
输出:
strlen('foo') - 3