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