在PHP中使用变量名作为值

在PHP中使用变量名作为值,php,variables,introspection,Php,Variables,Introspection,不知道如何在不漫谈C中的预处理器的情况下问这个问题,但我将尝试: 在PHP中,有没有一种方法可以将变量的名称用作字符串或值 这样就不用像这样调用函数 $somevar = 'whatever'; fun('somevar', $somevar); 你可以这样称呼它: fun(<magic:$somevar>, $somevar); fun()本身将推导变量的值('whatever')和名称('somevar')。(在C语言中,它可以通过预处理器define完成。) 上面的“ma

不知道如何在不漫谈C中的预处理器的情况下问这个问题,但我将尝试:

在PHP中,有没有一种方法可以将变量的名称用作字符串或值

这样就不用像这样调用函数

$somevar = 'whatever';

fun('somevar', $somevar);
你可以这样称呼它:

fun(<magic:$somevar>, $somevar);
fun()本身将推导变量的值('whatever')和名称('somevar')。(在C语言中,它可以通过预处理器define完成。)

上面的“magic”当然是我正在寻找的PHP中的magic语法的一个占位符,它将帮助我做到这一点。我想它可能是用eval()制作的?但是人们一直告诉我不要使用eval

有人暗示内省可能会起作用。欢迎任何线索。

试试这个

function var_name(&$var, $scope=0)
{
    $old = $var;
    if (($key = array_search($var = 'unique'.rand().'value', !$scope ? $GLOBALS : $scope)) && $var = $old) return $key;  
}

他们可能比我解释得更好,我想这就是你要找的

好的,在调用函数之前,请执行以下操作:

$var= "variableName";
$$var = "variableValue";
fun($var);
现在在function definition for fun中:

function fun($parameter)
{
    global $$parameter;
    echo $parameter; //echos the variableName
    echo $$parameter; //echos the variableValue
}


不,PHP的范围规则阻止您这样做。唯一的方法是通过预处理器(正如您所知道的)或通过内省代码,这也是同样的事情。PHP有一个内置的标记器,您可以使用它来解析文件。您可以使用
debug\u backtrace
查找要解析的文件。不过,这将是一件非常混乱和低效的事情,所以你最好重新思考一下自己在做什么。

这并不是他想要的for@Mythril我想他希望变量名是一个字符串。此函数返回该值。或者你能解释一下我哪里错了,这样我就可以纠正它了。在与函数相同的范围内运行这个函数
$x=5$y=5;echo变量名称($x),“\n”;echo变量名称($y),“\n”同样,当试图在函数的本地内部使用它时,这将完全失败。如果没有更好的性能,我最终会接受这个答案,因为您的函数可以工作。但我不会用它,它太奇怪了。:-)我从路人那里得到了一些关于ReflectionParameters的提示,但是你删除了你的评论。你想做什么?@Amigable你是在寻找类似于将变量名作为值返回的东西吗?@sberry,更简洁的代码,我有很多变量名,它们总是与字符串相同。同样的东西打两次是愚蠢的。@goldenparrot,从描述来看,从技术上来说是的,但实际上不完全是,如果我打错了会发生什么,fun(ltrim(“$somevarr',“$”),$somevar);就是PHP根本不提供任何帮助。如果第一个参数只是一个变量,解析器可能会警告$somevarr未定义。或者,不,这不是我要找的,或者我不明白页面上说的是什么。@RedHydra:我也会给出同样的警告answer@Double所以你也会指向一页,而不是写一个答案@AmigableClarkKant我已经更新了我的答案,我很确定这会对你有用,如果没有,请告诉我。这将如何帮助我写:$clevername='something';有趣($clevername)。。。。。。。有趣的是,了解“克利夫纳姆”和“某物”伊兰——“我不想卖给你死亡棒。”“特罗尔斯克恩——”你想回家重新思考你的生活。“和蔼可亲——”我想回家重新思考我的生活。”;)不知道您的用例,我可能会关闭,但听起来您可能想使用数组来实现这一点,不知怎么的?我想我只会使用fun('x',$x);至少它可读性强,直截了当,而且很容易直观地发现错误。如果它有效,那么我同意。冗长通常比聪明好。
function fun($parameter)
{
    global $$parameter;
    echo $parameter; //echos the variableName
    echo $$parameter; //echos the variableValue
}