PHP 数组的最后一个元素是否要加逗号

缘起

在 PHP 编程中, 困惑于"数组的最后一个元素后面是否要加逗号".

Array
(
    'a' => 'huhu',
    'b' => 'hehe'
)

还是

Array
(
    'a' => 'huhu',
    'b' => 'hehe',
)

思路

  1. 设置最严格的报错级别, 看看加上逗号是否报错;
  2. 使用 count() 查看加上逗号是否会导致数组元素数量的变化;
  3. 查看 PHP 手册的说明 以及 StackOverflow 上的讨论;

试验

试验 1 : 语法是否有问题

error_reporting(E_ALL);
$array = ['a','b','c',];
print_r($array);

输出:

Array
(
    [0] => a
    [1] => b
    [2] => c
)

说明数组的最后一个元素加上逗号是不违反 PHP 语法的.

"PHP 手册 - Array 章节" 中里提到:

Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.
在数组的最后一个元素后面加上逗号, 这种写法虽然不常见, 但是语法是有效的

而且手册中 "User Contributed Notes" 也提到:

Note the comma after the last element - this is perfectly legal. Moreover, it's best to add that last comma so that when you add new elements to the array, you don't have to worry about adding a comma after what used to be the last element.
在数组的最后一个元素后面加上逗号, 在语法上是完全没有问题的. 而且推荐这么做. 因为当你需要添加新的数组元素时, 不需要担心给之前那个元素加上逗号


试验 2 - 是否解析为有一个空元素

error_reporting(E_ALL);
$array = ['a','b','c',];
echo count($array);

输出结果为 3.

说明在数组的最后一个元素后面加上逗号, 并不会改变元素数量, 也就是说并不会自动加上一个空元素.


试验 3 - 对 Git 版本记录的影响

在 StackOverflow - No comma after last element in array 中看到, 加不加逗号会对 Git 版本记录产生影响.
尝试了一下, 的确会产生影响:

  • 最后一个元素不加逗号, 而后再添加一个元素, 版本变更记录 ( git diff )是这样的:

    PHP 数组的最后一个元素是否要加逗号_第1张图片

  • 而加逗号, 版本变更记录是这样的:


    PHP 数组的最后一个元素是否要加逗号_第2张图片

总结

结合 StackOverflow 上的讨论 StackOverflow - No comma after last element in array.

建议加逗号的理由:

  • 许多编程语法中是允许的, 比如 PHP & Python ("许多"这个词是 StackOverflow 上的用户 judda 说的, 具体适用多少种语言, 有待考证);
  • 在编辑数组时有优势, 不管是增加还是减少元素, 都避免了逗号带来的困扰 -- 不需要担心之前那个元素是否有逗号;
  • 编辑数组后, Git 版本记录中不会产生干扰信息;

建议不加逗号的理由:

  • 在 PHP 语法中是允许的, 但是在部分编程语言中是不允许的.
  • 在 JavaScript 中, 加逗号会出现一些兼容性问题, 比如 Chrome & Firefox 会正确识别 JS 的这种写法, 并且运行正常, 但是 IE 中却会出问题;
  • 在 JSON 中, 加逗号是不允许的;
  • 在 SQL 中, 比如 select 语句也是不允许在最后一个元素后加逗号的;

我的选择:

  • 在 PHP 数组的"格式化写法"中, 我选择写上逗号, 比如
Array
(
    'a' => 'huhu',
    'b' => 'hehe',
    'c' => 'haha',
)
  • 如果是这种写法, 则不加逗号:
array('a'=>'huhu', 'b'=>'hehe', 'c'=>'haha')
  • 在使用 JavaScript / JSON / SQL 时,需要提醒自己不要加上逗号.

参考文章

  • StackOverflow - No comma after last element in array?
  • PHP 官方手册

修改历史

  • 2017/03/12 (第一次发布)
  • 2017/05/28 (修改润色)
  • 2017/06/11 (修改润色)

如果你觉得我的文章对你有用, 请打个"喜欢", 或者给些改进的建议 _

你可能感兴趣的:(PHP 数组的最后一个元素是否要加逗号)