你能在PHP中获得一个变量名作为字符串吗? (你应该吗?)

时间:2010-11-15 02:08:29

标签: php string naming-conventions

假设您有几个大型变量数组(通常是字符串),并且您想要更改它们在某些页面上的显示方式 - 例如,通过将每个变量与$prefix$suffix连接起来:

$arr = array($foo, $bar, $baz)

$foo_display = $prefix . $foo . $suffix
$bar_display = $prefix . $bar . $suffix
$baz_display = $prefix . $baz . $suffix

您如何避免手动完成所有这些作业?我原先假设会有一些函数将变量的名称作为字符串返回(称之为“varname()”),在这种情况下代码可能如下所示:

foreach ($arr as &$value) {
    ${varname($value)."_display"} = $prefix . $value . $suffix
}

但是我找不到这样的功能,this similar thread中的人似乎认为整个概念都是可疑的。

PS:我是编程新手,对不起,如果这是一个愚蠢的问题:)

3 个答案:

答案 0 :(得分:4)

您想要做的事情有多个问题。例如,无法访问变量的名称。代码$arr = array($foo, $bar, $baz)创建一个包含$foo的数组。如果您随后更改了$foo的值,则{{1}的值}仍然是$arr[0]值,所以甚至不清楚访问变量名称意味着什么。

即使很容易做到,我也会认为这种做法很糟糕,仅仅是因为你需要通过内省知道正确的变量名称是什么。

当然,如果你有一个关联数组,这一切都很容易解决。例如:

$arr = array('Foo' => $foo, 'Bar' => $bar, 'Baz' => $baz)

这很容易被改变以产生你想要的东西。例如:

$display = array();
foreach($arr as $key => $value) 
   $display[$key] = $prefix . $value . $suffix;

答案 1 :(得分:0)

我需要一个更详细的例子来说明你要完成的任务,但我给你的方向是研究PHP如何进行键/值对:

http://php.net/manual/en/language.types.array.php

这样您可以像这样访问您的数组:

foreach ($valsArr as $key => $val) {
    $displayX = $prefix.$superArr[$key.'_display'].$suffix;
}

这必须根据您的特定结构/映射进行调整。试图使用变量名进行任何类型的映射的路线都很难。

答案 2 :(得分:0)

虽然可以从$ GLOBALS数组派生变量名,但是当您可以创建自己的自定义关联数组来跟踪这些变量值对时,迭代变量值对没有多大意义。如果你有两个或更多具有相同内容的$ value实例,你会如何期望程序通过内省跟踪变量名?它很快就会成为一团糟。

您应该自己在代码中跟踪它。