为什么PHP数组示例会留下逗号?


80

我看过以下示例:

$data = array(
   'username' => $user->getUsername(),
   'userpass' => $user->getPassword(),
   'email' => $user->getEmail(),
);

但是,实际上,我始终没有离开结尾的逗号。我是在做错什么,还是这只是“另一种”方式?如果我使用的是框架,结尾逗号不会对代码生成产生负面影响吗?我也看到过在其他语言(Java,C ++)的数组声明中也使用尾部逗号,因此我认为留下尾部逗号的原因并不特定于PHP,但这引起了我的兴趣。


1
当我在PHP中离开训练逗号时,我可能发誓我会解析错误。
Lotus Notes 2010年

我想这有可能。在此特定示例中,它解析得很好。
ashurexm

是的@LotusNotes我敢肯定我也有过错误。但是很明显,现在不再了!
Meezaan-ud-Din

Answers:


109

为什么PHP数组示例会留下逗号?

因为他们可以。:) PHP手动输入数组状态:

在最后定义的数组条目之后使用逗号结尾(虽然不寻常)是有效的语法。

认真地说,这完全是为了方便起见,因此您可以轻松地将另一个元素添加到数组中,而不必先将尾部逗号添加到最后一个条目。

谈到其他语言:在JavaScript中要小心。一些较旧的浏览器将引发错误,尽管较新的浏览器通常会允许它。


1
这就是我所想的,只是不确定是否丢失了某些东西。我想对于那些花时间用几种语言进行交流的人来说,这可能是一个不错的习惯。但是考虑到我使用了许多不同的语言,并且正如您所说的JavaScript(并且知道其他语言)可能会引发错误,所以对于我而言,继续保持不离开逗号的习惯可能更安全。
ashurexm

7
现在,比IE6 / 7代码新的JavaScript版本已明确允许使用它。
staticsan

9
Perl还允许使用逗号结尾,我相信这是受鼓励的。在使用源代码控制的开发人员之间共享代码时,拥有它实际上非常好。如果要在末尾添加一行,并且需要添加逗号,则意味着您在触摸这两行。git blame即使您刚刚添加了逗号,A (或其他源代码控件中的等效项)也将表明您已编写该行。无论哪种方式都没什么大不了,但是很方便。
redbmk 2012年

2
如果您有文件受源代码管理,这可以使更改的行数保持在较低水平,这很有用。
hakre 2012年

6
JSON也是如此,JSON讨厌尾随逗号。
凯尔·霍奇基斯

26

在多行上定义数组时,这是一个好习惯。ZendFramework的编码标准也鼓励它:

当使用后一个声明时,我们鼓励对数组的最后一项使用尾部逗号;这样可以最大程度地减少在连续的行上添加新项目的影响,并有助于确保不会因缺少逗号而导致解析错误。


22

我注意到在使用版本控制(git)时,如果我们向数组添加1个东西并且没有尾随逗号,则看起来就像我们修改了2行,因为必须将逗号添加到前一行。我发现这看起来很糟,并且在查看文件更改时可能会产生误导,因此,我认为以逗号结尾是一件好事。


这绝对是为什么尾随逗号用于:)差异一致性
Ninj

我不知道这与为什么存在有关。我不会。但我发现它很有用。
user985366

但是,这就是为什么它在这里的原因。可以说这是为了防止在下一行添加时出错。但事实并非如此,因为现在没有IDE允许您添加没有逗号的行,因此会弹出错误通知。
Ninj

@Ninj有趣。我对您的第一条评论具有讽刺意味,但不确定。
user985366

1
抱歉,可能看起来很讽刺。非常严重。我们在最后一个数组行上添加逗号,以帮助保持版本控制差异。
Ninj

8

因为它使条目保持一致。

如果您必须交换订单,或者添加或删除条目,那么知道可以留下逗号是非常方便的。

如果最后一个元素不能有逗号,那么您最终必须通过修改条目来维护最后一个逗号。这是没有意义的练习,浪费了时间和手指笔触,因为交换或修改条目的意图已经实现。

通过在最后一个元素上使用逗号结尾,可以使程序员不必费力去处理这些烦人且毫无结果的细节。


6

原因是提交更改。

如果必须在添加新元素时添加结尾逗号。您要更改1行并添加1行。(-++)

当上面的行中已经有逗号时,添加新元素时。仅添加了1行,没有更改。(+)


5

我不能代表其他人说话,但是我通常在代码中加上逗号。之所以这样做,是因为如果/以后在添加到数组时,我不必担心由于忘记在前面的最后一行添加逗号而错过逗号。


4

我觉得即使允许这样做也是一种不好的做法,就像忽略了函数和循环的最后一个分号一样。


3

我一直在做逗号结尾,因为它有助于避免在添加新的数组元素时出现语法错误……这只是一个好习惯。


3
抱歉,这个问题恢复了,但是,逗号后面如何防止以后出现语法错误?我刚刚发现PHP允许使用逗号结尾-但是我看不到/找不到它的用法。以后仍然可以通过添加新索引$arr[] = ...
丹尼尔(Daniel)

@Daniel,他说的是稍后再返回源代码,并将另一行添加到数组文字中。
2013年

0

最近这让我感到惊讶,但这是有道理的。长期以来,我一直在尝试遵循实现相同功能的更早的约定,即将分隔逗号放在每个条目的前面而不是结尾。

$data = array(
   'username' => $user->getUsername()
 , 'userpass' => $user->getPassword()
 , 'email' => $user->getEmail()
);

逗号也都以这种方式排列,看起来不错,但它会使缩进有些尴尬。也许由于这个原因,这些年来似乎并没有流行很多,而且我让其他人问我为什么这样做。我猜想PHP的解决方案是一个很好的折衷方案,无论如何,现在显然是公认的解决方案。


0

我一直在新条目的开头添加逗号。编译器将其视为预读的单字符标记,它表示“还有另外一个”。我不知道现代的编译器是否使用LR(1)(左递归,单令牌提前),但是我认为这是当逗号后面没有逗号时语法错误的来源。我很少有其他开发人员同意我的想法,但看起来就像JohnBrooking一样!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.