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

时间:2010-05-13 19:13:24

标签: php arrays code-generation

我见过如下例子:

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

然而,在实践中,我始终留下尾随逗号。我做错了什么,或者这只是另一种做法?如果我使用框架不会使尾随逗号影响代码生成负面?我已经看到在其他语言(Java,C ++)的数组声明中使用尾随逗号,所以我假设留下尾随逗号的原因并不是特定于PHP,但这引起了我的兴趣。

11 个答案:

答案 0 :(得分:90)

  

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

因为他们可以。 :) PHP Manual entry for array州:

  

在最后定义的数组条目之后有一个尾随逗号,虽然不常见,但却是一种有效的语法。

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

说到其他语言:在JavaScript中要小心。 Firefox将宽容地容忍尾随逗号;正确地说,Internet Explorer会抛出错误。

答案 1 :(得分:21)

在多行上定义数组时,这是一个很好的做法。 ZendFramework's coding standards

鼓励它
  

当使用后一种声明时,我们   鼓励使用尾随逗号   数组中的最后一项;这个   最大限度地减少添加新的影响   连续线上的项目和帮助   确保不会因为发生解析错误   一个丢失的逗号。

答案 2 :(得分:19)

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

答案 3 :(得分:7)

因为它使条目保持一致。

如果您必须交换订单,或添加或删除条目,您知道能够留下尾随逗号非常方便。

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

通过在最后一个元素上使用尾随逗号,它可以让程序员免于倾向于这种令人烦恼且毫无结果的细节。

答案 4 :(得分:4)

我不能代表其他人说话,但我通常在我的代码中留下一个逗号。我这样做是因为如果/后来我添加到数组中,我不必担心错过了一个逗号,因为忘记在之前的最后一行添加一个逗号。

答案 5 :(得分:4)

我觉得即使它被允许也是不好的做法,就像遗漏你的函数和循环的最后一个半冒号一样。

答案 6 :(得分:4)

原因是提交更改。

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

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

答案 7 :(得分:3)

我总是使用尾随逗号,因为它有助于在添加新数组元素时避免语法错误......这只是一个很好的做法。

答案 8 :(得分:1)

如果您查看圆形立方体文件配置 (config.inc.php) 的示例,它们会显示带有和不带有尾随逗号的示例。

这个数组定义了哪些插件应该被启用或禁用:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve',
'password',
'archive',
'zipdownload',
);
...

通常,这将是一行一行的,如果有人想在数组上添加一些东西,他们可以这样做:

...
// List of active plugins (in plugins/ directory)
$config['plugins'] = array(
'managesieve', //code by personA
'password', //code by personA
'archive', //code by personA
'zipdownload', //code by personA
'newplugin', //new code by personB
);
...

因此,当他们提交此代码时,他们只会看到该特定行的一个更改,并且在检查谁为该特定行进行代码更改时更具可读性。

在另一行代码中,您可以在没有尾随逗号的情况下看到这一点:

...
$config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'INBOX.spam', 'Trash');
...

通常只有一行代码,没有人希望这段代码经常更改。

换句话说:

1) 如果数组用作将来可能需要动态更改的选项或配置文件,则在末尾添加逗号。此外,如果您使用尾随逗号以编程方式更改该数组,则您只会更改一行代码,而没有它,您必须处理 2 行代码,这可能会导致解析数组更加复杂< /p>

2) 如果数组是常量数组,并且您不希望它在将来发生变化,则不必添加尾随逗号,但正如已接受的答案所述,您可以添加尾随逗号,但是它没有任何目的

答案 9 :(得分:0)

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

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

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

答案 10 :(得分:0)

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