使用循环和数组定义PHP变量名 - 良好的做​​法?

时间:2014-11-26 23:04:01

标签: php variables variable-variables

我需要为一系列

定义一组变量
$charta ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/aplha.png" alt ="" />';
$chartb ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/bravo.png" alt ="" />';
$chartc ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/charlie.png" alt ="" />';
等等......

我没有像这样定义它们,而是想使用循环来使用数组来定义它们

$names = array (
'aplha' =>  'a',
'bravo' =>   'b',
'charlie' => 'c'
);

所以我在阅读了PHP文档中的变量变量后尝试了这个

foreach($names as $k=>$v){
${'chart' . $v} ='<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/'.$k.'.png" alt ="" />';
}

这很有效。

我的简单问题是 - 这是好的/可接受的做法吗?我向一位经验丰富的程序员解释了我的方法,他们告诉我找到另一种不包含变量变量的方法,因为它们是不好的做法 - 但我不能想到这有什么问题,也不知道怎么做得更好。

思想?

1 个答案:

答案 0 :(得分:0)

我会使用$ v作为键的数组。它是可读的。更好的是:

$names = array(
  'a' => 'yourimage1',
  'b' => 'yourimage2',
  'c' => 'yourimage3',
);

function chartImage($img_string = 'your-default-img')
{
    return '<img src="'.$_SERVER["DOCUMENT_ROOT"].'/output/pdf/charts/'.$img_string.'.png" alt ="" />';
}

// somewhere in your code

print chartImage($names['a']); // or
<?= chartImage($names['a']); ?>

我会这样做,因为很容易看出你在做什么。更好的可读性。

当您定义数据时,变量变量是不好的做法。没有理由使用它。处理未知数据时使用变量变量。由于您知道并预定义序列中的变量,因此变量变量不会增加任何增强功能,并且在查看代码时会使第二组眼睛变得非常混乱。

使用变量变量的一个很好的例子是调查。您不确定会有多少验证或答案,因此您将编码保存变量数据的变量。当我创建一个调查系统时,我创建了变量,这些变量包含处理验证类型和输入类型的数组的可变数据。它归结为上下文和修复解决方案。在您的上下文中使用变量不会修复解决方案。