为什么PHP数组示例在后面留下逗号?

为什么PHP数组示例在后面留下逗号?,php,arrays,code-generation,Php,Arrays,Code Generation,我看到过如下例子: $data = array( 'username' => $user->getUsername(), 'userpass' => $user->getPassword(), 'email' => $user->getEmail(), ); 然而,在实践中,我总是而不是在后面留下逗号。是我做错了什么,还是这只是另一种方式?如果我使用的是一个框架,后面的逗号会不会对代码生成产生负面影响?我也见过在其他语言(Java、C++)

我看到过如下例子:

$data = array(
   'username' => $user->getUsername(),
   'userpass' => $user->getPassword(),
   'email' => $user->getEmail(),
);
然而,在实践中,我总是而不是在后面留下逗号。是我做错了什么,还是这只是另一种方式?如果我使用的是一个框架,后面的逗号会不会对代码生成产生负面影响?我也见过在其他语言(Java、C++)的数组声明中使用尾随逗号,因此我认为留下尾随逗号的原因并不特定于PHP,但这引起了我的兴趣

为什么PHP数组示例在后面留下逗号

因为他们可以。:)各国:

在最后一个定义的数组项后面有一个尾随逗号是一种有效的语法,尽管这很少见

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


谈到其他语言:在JavaScript中要注意这一点。一些较旧的浏览器会抛出错误,尽管较新的浏览器通常允许抛出错误。

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

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

在多行上定义数组时,这是一个很好的实践。它还受到以下因素的鼓励:

当使用后一种声明时,我们 鼓励使用后面的逗号来表示 数组中的最后一项;这 最大限度地减少添加新组件的影响 连续行中的项目,以及帮助 确保没有由于以下原因而发生分析错误: 缺少的逗号


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

因为它保持了条目的一致性

如果您必须交换顺序,或者添加或删除条目,您知道可以在后面留下逗号是非常方便的

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


通过允许在最后一个元素上添加一个尾随逗号,程序员就不必去处理这个烦人且毫无结果的细节了。

在使用版本控制(git)时,我注意到,如果我们在数组中添加一个元素,而没有尾随逗号,看起来我们修改了两行,因为逗号必须添加到前一行。我发现这看起来很糟糕,在查看文件更改时可能会产生误导,因此我认为后面加逗号是一件好事

原因是提交更改

如果在添加新元素时必须添加尾随逗号。您正在更改一行并添加一行。(++)


添加新元素时,如果上面一行中已有逗号。只增加了一行,没有更改。(+)

这让我最近很惊讶,但这是有道理的。长期以来,我一直试图遵守一个较早的约定,该约定实现了同样的目的,即在每个条目前面而不是末尾放置分隔逗号

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

逗号也都是这样排列的,看起来不错,但这会使缩进有点尴尬。也许正是因为这个原因,这些年来它似乎没有流行起来,我也有人问我为什么要这样做。我想PHP的解决方案是一个很好的折衷方案,而且在任何情况下,它显然是现在公认的解决方案。

我总是在新条目的开头添加逗号。 编译器将其视为前瞻的单字符标记 上面写着“还有一个会来”。我不知道是否现代 编译器使用LR(1)(左递归,单令牌前瞻)但是 我想这就是当一个逗号 之后什么都没有。 很少有其他开发者同意我的观点,但是
看起来像是约翰布鲁克

如果您看一个roundcube文件配置(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)如果数组是一个常量数组,并且你不希望它在将来发生变化,那么你不必使用尾随逗号,但是正如公认的答案所提到的,你可以使用尾随逗号,但它没有任何用途

我可以发誓我在离开PHP中的逗号训练时遇到了解析错误。我想这是可能的。在这个特定的例子中,它解析得很好。是的@LotusNotes,我肯定我以前也有过错误。但很明显,现在不是了!这就是我想的,我只是不确定我是不是因为什么事错过了船。我想对于那些花时间学习几种语言的人来说,这可能是一个不错的习惯。但是考虑到我处理很多不同的语言