在PHP中使用变量NAME作为值

时间:2012-09-06 07:11:57

标签: php variables introspection

不知道如何在不使用C语言的预处理器的情况下问这个问题,但我会尝试:

在PHP中是否有办法将变量的名称用作字符串或值。

这样,而不是像这样调用函数,

$somevar = 'whatever';

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

fun(<magic:$somevar>, $somevar);

甚至,我敢说,喜欢这个

fun($somevar);

并且fun()本身会推导出变量的值('whatever')和名称('somevar')。 (在C中,可以使用预处理器#define来完成。)

上面的

“magic”当然是PHP中魔术语法的占位符,我正在寻找哪些可以帮助我做到这一点。我想它可以用eval()以某种方式制作?但人们一直告诉我不要使用eval。

有人暗示内省可能会以某种方式解决问题。任何领导都会受到欢迎。

3 个答案:

答案 0 :(得分:2)

试试这个

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

答案 1 :(得分:2)

http://php.net/manual/en/language.variables.variable.php

可能比我更好地解释它,我想这就是你要找的东西?

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

$var= "variableName";
$$var = "variableValue";
fun($var);

现在在fun的函数定义中:

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

答案 2 :(得分:1)

没有。 PHP的范围规则阻止您这样做。唯一的方法是通过预处理器(如您所知)或通过内省代码,这将是一回事。 PHP有一个内置的tokenizer,你可以使用它来解析文件。您可以使用debug_backtrace找出要解析的文件。尽管如此,这将是一个非常混乱和低效的事情,所以你可能最好重新考虑你正在做的事情。