【问题标题】:Use variable NAME as value in PHP在 PHP 中使用变量 NAME 作为值
【发布时间】:2012-08-30 23:00:23
【问题描述】:

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

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

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

$somevar = 'whatever';

fun('somevar', $somevar);

你可以这样称呼它:

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

甚至,我敢说,像这样

fun($somevar);

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

上面的

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

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

【问题讨论】:

  • 路人有一些关于ReflectionParameters的提示,但是你删除了你的cmets。
  • 你想要完成什么?
  • @Amigable 您是否正在寻找类似将变量名称作为值返回的东西?
  • @sberry,更简洁的代码,我有很多变量名总是与那个字符串相同。两次输入相同的内容是愚蠢的。
  • @goldenparrot,从描述上看,技术上是的,但实际上不完全是,如果我输入错误会发生什么,fun(ltrim('$somevarr', '$'), $somevar);是PHP根本没有提供任何帮助。如果第一个参数只是一个变量,解析器会警告 $somevarr 未定义。

标签: php variables introspection


【解决方案1】:

试试这个

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

【讨论】:

  • 这不是他要找的东西
  • @Mythril 我认为他希望变量名作为字符串。这个函数返回那个。或者你能解释一下我错在哪里,以便我纠正它。
  • 在与你的函数$x = 5; $y = 5; echo var_name($x), "\n"; echo var_name($y), "\n";相同的范围内运行它
  • 另外,当尝试在函数的本地内部使用它时,这将完全失败
  • 如果没有更好的性能表现,我最终会接受这个答案,因为你的功能有效。但我不会用它,它太奇怪了。 :-)
【解决方案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
}

【讨论】:

  • 要么,不,这不是我要找的,要么我不明白该页面的内容。
  • @RedHydra:我也会给出同样的答案
  • @Double 所以你也会指向一个页面而不是真正写一个答案。 ;-)
  • @AmigableClarkKant 我已经更新了我的答案,我很确定这对你有用,如果没有,请告诉我。
  • 这将如何帮助我写:$clevername = 'something';有趣($聪明的名字); ....... 和 fun() 知道“聪明的名字”和“某事”
【解决方案3】:

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

【讨论】:

  • Elan - “我不想卖给你死杖。” troelskn - “你想回家重新思考你的生活。” Amigable - “我想回家重新思考我的生活。”
  • ;) - 不知道你的用例,我可能会离开,但听起来你可能想为此使用一个数组,不知何故?
  • 我想我会用 fun('x', $x);至少它非常易读、简单明了,而且很容易从视觉上发现错误。
  • 如果它有效,那么我同意。冗长通常胜于聪明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多