Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取在函数参数中表示变量的字符串?_Php - Fatal编程技术网

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

Php 如何获取在函数参数中表示变量的字符串?,php,Php,如何获取在函数参数中表示变量的字符串 范例 function dbg($param){ return "param"; } $var="Hello World"; echo dgb($var); 输出:var $arr=array(); echo dgb($arr); 输出:arr打印变量时,您做错了。 正确的方法是这样的: function dbg($param){ return $param; } $var="Hello World"; e

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

范例

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

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

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

输出:
arr

打印变量时,您做错了。
正确的方法是这样的:

function dbg($param){
      return $param; 

 }
 $var="Hello World";
 echo dgb($var);
function dbg($var) {
    echo 'name: ' . key($var) . ', value: ' . current($var);
}

$foo = 'bar';
dbg(compact('foo'));

顺便说一下,您将数组传递给只接受变量的函数。哦,这是一个空数组,更糟

打印变量时,您做错了。
正确的方法是这样的:

function dbg($param){
      return $param; 

 }
 $var="Hello World";
 echo dgb($var);
function dbg($var) {
    echo 'name: ' . key($var) . ', value: ' . current($var);
}

$foo = 'bar';
dbg(compact('foo'));

顺便说一下,您将数组传递给只接受变量的函数。哦,这是一个空数组,更糟

你的问题没有多大意义,你可能想改写它


听起来您想在函数中使用
$param
,在这种情况下,您只需执行一些链接
echo$param

您的问题没有多大意义,您可能需要改写它


听起来您想在函数中使用
$param
,在这种情况下,您只需执行一些链接
echo$param

我猜您正在尝试制作一个自定义调试器,它可以打印您正在调试的变量的名称。那真的不可能。我建议您看看,它允许您打印调用
dbg
函数的位置的文件、行号、函数名和参数。除非您在每行中多次使用
dbg
,这有助于您查找所需的信息,而且IMO还是非常有用的

或者,如果您这样调用函数,您可以同时拥有变量的名称和值:

function dbg($param){
      return $param; 

 }
 $var="Hello World";
 echo dgb($var);
function dbg($var) {
    echo 'name: ' . key($var) . ', value: ' . current($var);
}

$foo = 'bar';
dbg(compact('foo'));

我只是猜测,您正在尝试制作一个自定义调试器,它可以打印您正在调试的变量的名称。那真的不可能。我建议您看看,它允许您打印调用
dbg
函数的位置的文件、行号、函数名和参数。除非您在每行中多次使用
dbg
,这有助于您查找所需的信息,而且IMO还是非常有用的

或者,如果您这样调用函数,您可以同时拥有变量的名称和值:

function dbg($param){
      return $param; 

 }
 $var="Hello World";
 echo dgb($var);
function dbg($var) {
    echo 'name: ' . key($var) . ', value: ' . current($var);
}

$foo = 'bar';
dbg(compact('foo'));

不可能可靠地执行您的要求。

最接近的方法是执行
debug\u 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;
}
函数dbg($var){
$bt=debug_backtrace();
$file=$bt[0]['file'];
$line=$bt[0]['line'];
$source=file\u get\u contents($file);
$tmpTokens=token\u get\u all($source);
$tokens=array();
foreach($tmpTokens作为$token){
if(is_数组($token)&&$token[0]!==T_内联HTML&&$token[0]!==T_空格){
$tokens[]=$token;
}
}
未结算($tmpTokens);
$countTokens=计数($tokens);
对于($i=0;$i<$countTokens;$i++){
如果($tokens[$i][3]>$line | |$i===$countTokens-1){
$x=$i-($tokens[$i][3]>$line)?1:0);
对于($x;$x>=0;$x--){
如果($tokens[$x][0]==T_字符串&&$tokens[$x][1]===U函数&){
如果($x!=$countTokens-1&&$tokens[$x+1][0]==T\u变量){
返回$tokens[$x+1][1];
}
}
}
}
}
返回null;
}

不可能可靠地执行您的要求。

最接近的方法是执行
debug\u 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;
}
函数dbg($var){
$bt=debug_backtrace();
$file=$bt[0]['file'];
$line=$bt[0]['line'];
$source=file\u get\u contents($file);
$tmpTokens=token\u get\u all($source);
$tokens=array();
foreach($tmpTokens作为$token){
if(is_数组($token)&&$token[0]!==T_内联HTML&&$token[0]!==T_空格){
$tokens[]=$token;
}
}
未结算($tmpTokens);
$countTokens=计数($tokens);
对于($i=0;$i<$countTokens;$i++){
如果($tokens[$i][3]>$line | |$i===$countTokens-1){
$x=$i-($tokens[$i][3]>$line)?1:0);
对于($x;$x>=0;$x--){
如果($tokens[$x][0]==T_字符串&&$tokens[$x][1]===U函数&){
如果($x!=$countTokens-1&&$tokens[$x+1][0]==T\u变量){
返回$tokens[$x+1][1];
}
}
}
}
}
返回null;
}

您想解决什么问题?我不太清楚你想做什么。在调用
dgb()
时,只要使用任何参数,它就会返回单词“param”。当调用
dbg()
时,无法知道调用了什么输入变量。
dgb($arr)
→ <代码>回显“arr”
。这已经被问过了,这是不可能的(至少没有可怕的黑客)。我也会对一个用例感兴趣。@decezedgb($arr)→ echo'arr'是的,这是我在这个问题上想要的,我是说如果这就是你想要做的,把
dbg($arr)
改为
echo'arr'
。是的,这个评论是开玩笑的。你想解决什么问题?我不太清楚你想做什么。在调用
dgb()
时,只要使用任何参数,它就会返回单词“param”。当调用
dbg()
时,无法知道调用了什么输入变量。
dgb($arr)
→ <代码>回音'a