使用循环和数组定义 PHP 变量名 - 好的做法?[已结束]

Defining PHP variable names using a loop and arrays - good practice? [closed]

提问人:Gideon 提问时间:11/27/2014 更新时间:11/27/2014 访问量:162

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

8年前关闭。

我需要为一个系列定义一组变量

$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 ="" />';
}

这有效。

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

思潮?

PHP 变量

评论

4赞 Mark Baker 11/27/2014
当您在数组本身中拥有数据并且可以简单地在那里访问它时,为什么还需要为每个数组条目创建单独的变量?
4赞 Wrikken 11/27/2014
嗯,为什么不声明为数组并使用?经验法则:在 99.999% 的情况下,变量是一个糟糕的选择。$charts$charts[$v] = ..
0赞 Kai Qing 11/27/2014
我同意上述两种观点。为什么要降低代码的可读性?如果我继承了一个带有这种变量声明的项目,我会立即退出并在家得宝填写申请表
0赞 Gideon 11/27/2014
@Wrikken好吧!这似乎很好,在我(无知的)头脑中,它们似乎基本上是等价的,你能详细解释一下为什么我原来的方法更糟吗?我已经调整了我的代码以定义一个新的数组$charts并按照您所说的通过 $charts[a] 等引用它。谢谢(如果你把它变成一个答案,我可以接受)
0赞 Gideon 11/27/2014
是的,好吧@KaiQing我只是想改进,没有必要辞掉你假设的工作:P

答:

0赞 Paul Carlton 11/27/2014 #1

我会使用一个以 $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']); ?>

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

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

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