緣起
在 PHP 編程中, 困惑于"數(shù)組的最后一個元素后面是否要加逗號".
是
Array
(
'a' => 'huhu',
'b' => 'hehe'
)
還是
Array
(
'a' => 'huhu',
'b' => 'hehe',
)
思路
- 設(shè)置最嚴格的報錯級別, 看看加上逗號是否報錯;
- 使用
count()
查看加上逗號是否會導致數(shù)組元素數(shù)量的變化; - 查看 PHP 手冊的說明 以及 StackOverflow 上的討論;
試驗
試驗 1 : 語法是否有問題
error_reporting(E_ALL);
$array = ['a','b','c',];
print_r($array);
輸出:
Array
(
[0] => a
[1] => b
[2] => c
)
說明數(shù)組的最后一個元素加上逗號是不違反 PHP 語法的.
"PHP 手冊 - Array 章節(jié)" 中里提到:
Having a trailing comma after the last defined array entry, while unusual, is a valid syntax.
在數(shù)組的最后一個元素后面加上逗號, 這種寫法雖然不常見, 但是語法是有效的
而且手冊中 "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.
在數(shù)組的最后一個元素后面加上逗號, 在語法上是完全沒有問題的. 而且推薦這么做. 因為當你需要添加新的數(shù)組元素時, 不需要擔心給之前那個元素加上逗號
試驗 2 - 是否解析為有一個空元素
error_reporting(E_ALL);
$array = ['a','b','c',];
echo count($array);
輸出結(jié)果為 3
.
說明在數(shù)組的最后一個元素后面加上逗號, 并不會改變元素數(shù)量, 也就是說并不會自動加上一個空元素.
試驗 3 - 對 Git 版本記錄的影響
在 StackOverflow - No comma after last element in array 中看到, 加不加逗號會對 Git 版本記錄產(chǎn)生影響.
嘗試了一下, 的確會產(chǎn)生影響:
-
最后一個元素不加逗號, 而后再添加一個元素, 版本變更記錄 (
git diff
)是這樣的:
-
而加逗號, 版本變更記錄是這樣的:
總結(jié)
結(jié)合 StackOverflow 上的討論 StackOverflow - No comma after last element in array.
建議加逗號的理由:
- 在許多編程語法中是允許的, 比如 PHP & Python ("許多"這個詞是 StackOverflow 上的用戶 judda 說的, 具體適用多少種語言, 有待考證);
- 在編輯數(shù)組時有優(yōu)勢, 不管是增加還是減少元素, 都避免了逗號帶來的困擾 -- 不需要擔心之前那個元素是否有逗號;
- 編輯數(shù)組后, Git 版本記錄中不會產(chǎn)生干擾信息;
建議不加逗號的理由:
- 在 PHP 語法中是允許的, 但是在部分編程語言中是不允許的.
- 在 JavaScript 中, 加逗號會出現(xiàn)一些兼容性問題, 比如 Chrome & Firefox 會正確識別 JS 的這種寫法, 并且運行正常, 但是 IE 中卻會出問題;
- 在 JSON 中, 加逗號是不允許的;
- 在 SQL 中, 比如
select
語句也是不允許在最后一個元素后加逗號的;
我的選擇:
- 在 PHP 數(shù)組的"格式化寫法"中, 我選擇寫上逗號, 比如
Array
(
'a' => 'huhu',
'b' => 'hehe',
'c' => 'haha',
)
- 如果是這種寫法, 則不加逗號:
array('a'=>'huhu', 'b'=>'hehe', 'c'=>'haha')
- 在使用 JavaScript / JSON / SQL 時冷守,需要提醒自己不要加上逗號.
參考文章
修改歷史
- 2017/03/12 (第一次發(fā)布)
- 2017/05/28 (修改潤色)
- 2017/06/11 (修改潤色)
如果你覺得我的文章對你有用, 請打個"喜歡", 或者給些改進的建議 _