我见过如下例子:
$data = array(
'username' => $user->getUsername(),
'userpass' => $user->getPassword(),
'email' => $user->getEmail(),
);
然而,在实践中,我始终不留下尾随逗号。我做错了什么,或者这只是另一种做法?如果我使用框架不会使尾随逗号影响代码生成负面?我已经看到在其他语言(Java,C ++)的数组声明中使用尾随逗号,所以我假设留下尾随逗号的原因并不是特定于PHP,但这引起了我的兴趣。
答案 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一样!