如何获取变量变量的名称?

时间:2011-05-31 00:08:33

标签: php variables

所以,我需要来自全局空间的实际变量名“ varName ”。这个函数实际上是一个类中的方法。

为简单起见,代码是随意的

$varName = 'what ever';

public function save($var)
{
    $i[varName goes here] = $var;
}

我不知道这是否可行,但我想可能会有回调?

4 个答案:

答案 0 :(得分:1)

如果它是全局变量,您可能能够找到原始名称:

$varname = array_search($var, $GLOBALS);

但那并不过分可靠;最好的猜测。如果两个全局变量包含相同的值,您只需接收其中任何一个的名称。

答案 1 :(得分:1)

了解$GLOBALS变量in the documentation

这可能就是你所需要的。根据您确定所需变量的方式,您可以使用例如用户array_search()根据值找到正确的名称。

警告:$GLOBALS是关于全局范围的变量。

修改

但这仍然是猜测。您可以尝试以下方法来确定传递变量的名称,其中包含~100%的确定性:

  1. 将变量传递给参考的方法。
  2. 使用array_search()查找变量名称。如果只有一个键与之匹配,那么您就有了自己的名字。如果没有,请转到下一步。
  3. 保存变量的初始值并保存找到匹配元素的位置列表。
  4. 将变量的值更改为新值。根据新值执行另一次搜索,并获得位于点号的位置列表中的位置。 3。
  5. 此时您可能已找到要查找的变量的名称。
  6. 但是...

    真的需要吗?我建议您应该寻找更简单的解决方案,更好地封装您的代码。

    聚苯乙烯。 array_search()实际上只返回一个密钥(see documentation)。如果多个变量符合您的搜索条件,您应该知道这一点,并使搜索多个结果更复杂一点,以免跳过正确的结果。 ( EDIT2:正如马里奥所说,array_intersect($GLOBALS, array($var))就足够了)

答案 2 :(得分:0)

在C中,您将使用宏。我不认为PHP中存在等价物。

您可以将变量的名称作为字符串传递给函数,然后在函数中从GLOBALS获取变量的值或 eval

答案 3 :(得分:0)

感谢您的解决方案! 这是我的测试:

<?php
$varName = 'what ever';

function save($var)
{
    $i[array_search($var, $GLOBALS)] = $var;
    print_r($i);
}
save($varName);
?>

打印:

Array
(
    [varName] => what ever
)