所以,我需要来自全局空间的实际变量名“ varName ”。这个函数实际上是一个类中的方法。
为简单起见,代码是随意的
$varName = 'what ever';
public function save($var)
{
$i[varName goes here] = $var;
}
我不知道这是否可行,但我想可能会有回调?
答案 0 :(得分:1)
如果它是全局变量,您可能能够找到原始名称:
$varname = array_search($var, $GLOBALS);
但那并不过分可靠;最好的猜测。如果两个全局变量包含相同的值,您只需接收其中任何一个的名称。
答案 1 :(得分:1)
了解$GLOBALS
变量in the documentation。
这可能就是你所需要的。根据您确定所需变量的方式,您可以使用例如用户array_search()
根据值找到正确的名称。
警告:$GLOBALS
是关于全局范围的变量。
修改强>
但这仍然是猜测。您可以尝试以下方法来确定传递变量的名称,其中包含~100%的确定性:
array_search()
查找变量名称。如果只有一个键与之匹配,那么您就有了自己的名字。如果没有,请转到下一步。但是...
真的需要吗?我建议您应该寻找更简单的解决方案,更好地封装您的代码。
聚苯乙烯。 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
)