如何在PHP中获取变量名称作为字符串?

php
2022-08-30 06:18:25

假设我有这个PHP代码:

$FooBar = "a string";

然后我需要一个这样的函数:

print_var_name($FooBar);

哪些打印:

FooBar

任何想法如何实现这一目标?这在PHP中甚至可能吗?


答案 1

我也想不出一种方法来有效地做到这一点,但我想出了这个。它适用于以下有限用途。

耸肩

<?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
)

它基于调用函数的行工作,在该行中查找您传入的参数。我想它可以扩展到多个论点,但是,正如其他人所说,如果你能更好地解释这种情况,另一种解决方案可能会更好。


答案 2

您可以使用 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中没有好的方法可以做到这一点,这可能是因为你不应该这样做。可能有更好的方法来做你想做的事情。


推荐