不知道如何在不使用C语言的预处理器的情况下问这个问题,但我会尝试:
在PHP中是否有办法将变量的名称用作字符串或值。
这样,而不是像这样调用函数,
$somevar = 'whatever';
fun('somevar', $somevar);
你可以这样称呼它:
fun(<magic:$somevar>, $somevar);
甚至,我敢说,喜欢这个:
fun($somevar);
并且fun()本身会推导出变量的值('whatever')和名称('somevar')。 (在C中,可以使用预处理器#define来完成。)
上面的“magic”当然是PHP中魔术语法的占位符,我正在寻找哪些可以帮助我做到这一点。我想它可以用eval()以某种方式制作?但人们一直告诉我不要使用eval。
有人暗示内省可能会以某种方式解决问题。任何领导都会受到欢迎。
答案 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
找出要解析的文件。尽管如此,这将是一个非常混乱和低效的事情,所以你可能最好重新考虑你正在做的事情。