2

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

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

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

$somevar = 'whatever';

fun('somevar', $somevar);

你可以这样称呼它:

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

甚至,我敢说,像这样

fun($somevar);

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

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

有人暗示内省可能会以某种方式解决问题。欢迎任何线索。

4

3 回答 3

2

试试这个

function var_name(&$var, $scope=0)
{
    $old = $var;
    if (($key = array_search($var = 'unique'.rand().'value', !$scope ? $GLOBALS : $scope)) && $var = $old) return $key;  
}
于 2012-09-06T07:22:00.000 回答
2

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

可能比我解释得更好,我认为这就是你要找的东西?

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

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

现在在函数定义中很有趣:

function fun($parameter)
{
    global $$parameter;
    echo $parameter; //echos the variableName
    echo $$parameter; //echos the variableValue
}
于 2012-09-06T07:24:23.887 回答
1

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

于 2012-09-06T08:07:18.033 回答