如何在函数参数中获取呈现变量的字符串?

时间:2011-06-23 06:55:27

标签: php

如何获取在函数参数中显示变量的字符串?

示例

function dbg($param){
      return "param"; 

 }
 $var="Hello World";
 echo dgb($var);

输出:var

 $arr=array();
 echo dgb($arr);

输出:arr

4 个答案:

答案 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;