缘起
在 PHP 编程中, 困惑于"数组的最后一个元素后面是否要加逗号".
是
Array
(
'a' => 'huhu',
'b' => 'hehe'
)
还是
Array
(
'a' => 'huhu',
'b' => 'hehe',
)
思路
- 设置最严格的报错级别, 看看加上逗号是否报错;
- 使用
count()
查看加上逗号是否会导致数组元素数量的变化; - 查看 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
)是这样的:
-
而加逗号, 版本变更记录是这样的:
总结
结合 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 (修改润色)
如果你觉得我的文章对你有用, 请打个"喜欢", 或者给些改进的建议 _