如何获取在函数参数中显示变量的字符串?
示例
function dbg($param){
return "param";
}
$var="Hello World";
echo dgb($var);
输出:var
$arr=array();
echo dgb($arr);
输出:arr
答案 0 :(得分:1)
打印变量,你做错了。
正确的方法是这样的:
function dbg($param){
return $param;
}
$var="Hello World";
echo dgb($var);
顺便提一下,你将数组传递给只接受变量的函数。哦,它一直是一个空数组更糟糕!
答案 1 :(得分:1)
我只是猜测你正在尝试制作一个自定义调试器,它可以打印出你正在调试的变量的名称。嗯,这不太可能。我建议您查看debug_backtrace
,它允许您打印调用dbg
函数的位置的文件,行号,函数名称和参数。除非您每行使用dbg
多次,以帮助您找到所需的信息,否则IMO会更有用。
或者,如果您按照以下方式调用函数,则可以同时拥有变量的名称和值:
function dbg($var) {
echo 'name: ' . key($var) . ', value: ' . current($var);
}
$foo = 'bar';
dbg(compact('foo'));
答案 2 :(得分:1)
无法可靠地完成您的要求。
最接近你可以做的是debug_backtrace()
检查哪个文件调用该函数,然后将该文件的源标记为查找引用。
同样,这将无法可靠地运作。如果您在一行上有多个呼叫,它将失败。说实话,这不是麻烦。无论如何,您正在编写代码,您知道要传递的是哪个变量。
function dbg($var) {
$bt = debug_backtrace();
$file = $bt[0]['file'];
$line = $bt[0]['line'];
$source = file_get_contents($file);
$tmpTokens = token_get_all($source);
$tokens = array ();
foreach ($tmpTokens as $token) {
if (is_array($token) && $token[0] !== T_INLINE_HTML && $token[0] !== T_WHITESPACE) {
$tokens[] = $token;
}
}
unset($tmpTokens);
$countTokens = count($tokens);
for ($i = 0; $i < $countTokens; $i++) {
if ($tokens[$i][3] > $line || $i === $countTokens - 1) {
$x = $i - (($tokens[$i][3] > $line) ? 1 : 0);
for ($x; $x >= 0; $x--) {
if ($tokens[$x][0] === T_STRING && $tokens[$x][1] === __FUNCTION__) {
if ($x !== $countTokens - 1 && $tokens[$x + 1][0] === T_VARIABLE) {
return $tokens[$x + 1][1];
}
}
}
}
}
return null;
}
答案 3 :(得分:0)
你的问题没有多大意义,你可能想改写它。
听起来你想在函数中使用$param
,在这种情况下你可以做一些链接echo $param;