如何在PHP中获取变量名称作为字符串?
2022-08-30 06:18:25
假设我有这个PHP代码:
$FooBar = "a string";
然后我需要一个这样的函数:
print_var_name($FooBar);
哪些打印:
FooBar
任何想法如何实现这一目标?这在PHP中甚至可能吗?
假设我有这个PHP代码:
$FooBar = "a string";
然后我需要一个这样的函数:
print_var_name($FooBar);
哪些打印:
FooBar
任何想法如何实现这一目标?这在PHP中甚至可能吗?
我也想不出一种方法来有效地做到这一点,但我想出了这个。它适用于以下有限用途。
耸肩
<?php
function varName( $v ) {
$trace = debug_backtrace();
$vLine = file( __FILE__ );
$fLine = $vLine[ $trace[0]['line'] - 1 ];
preg_match( "#\\$(\w+)#", $fLine, $match );
print_r( $match );
}
$foo = "knight";
$bar = array( 1, 2, 3 );
$baz = 12345;
varName( $foo );
varName( $bar );
varName( $baz );
?>
// Returns
Array
(
[0] => $foo
[1] => foo
)
Array
(
[0] => $bar
[1] => bar
)
Array
(
[0] => $baz
[1] => baz
)
它基于调用函数的行工作,在该行中查找您传入的参数。我想它可以扩展到多个论点,但是,正如其他人所说,如果你能更好地解释这种情况,另一种解决方案可能会更好。
您可以使用 get_defined_vars() 来查找与尝试查找其名称的值相同的变量的名称。显然,这并不总是有效的,因为不同的变量通常具有相同的值,但这是我能想到的唯一方法。
编辑:get_defined_vars() 似乎工作不正常,它返回“var”,因为函数本身使用了$var。$GLOBALS似乎有效,所以我把它改成了那个。
function print_var_name($var) {
foreach($GLOBALS as $var_name => $value) {
if ($value === $var) {
return $var_name;
}
}
return false;
}
编辑:要清楚的是,在PHP中没有好的方法可以做到这一点,这可能是因为你不应该这样做。可能有更好的方法来做你想做的事情。