自 PHP 7.3 开始将允许函数传参以逗号结尾
PHP 7.3 不会有箭头函数 (那会很梦幻)。但是,函数调用中的逗号结尾是 PHP 7.3的一个很好的补充。
在 PHP 7.3中,函数调用中的逗号结尾将是有效的语法。也就是说,可以在调用函数时使用尾部逗号,但不能定义它们。
函数调用中的尾部逗号对于可变参数函数特别有用:
//
unset(
$one,
$two,
$three,
);
return view('posts.show', compact(
'post',
'author',
'comments',
));
重要的是,此更改仅影响 call 语法,而不影响函数声明!以下语法在 PHP 7.3中仍然是非法的:
// Still illegal syntax
public function __construct(
$apiClient,
array $options = [],
) {
}
PHP 数组中的尾随逗号
当你要重新排列数组或追加新值时,使用尾随(有时称为悬空)逗号既好又干净。
PHP 数组中的尾部逗号永远都是合法的(我不确定何时引入),除了自 PHP 7.2起在分组命名空间中使其合法以外,它可能是你在 PHP 中唯一暴露尾部逗号的方式。
为何使用尾随逗号是有好处的,以及为什么某些团队一直在数组中强制使用此代码风格,这其中的一个争论就是明显存在差异。当你要追加新的数组项时,在最后一行添加逗号以追加另一个值时,差异会影响这两行:
// Before
$points = [
1,
5,
7
];
// After
$points = [
1,
5,
+ 7,
+ 9
];
使用尾随逗号,差异仅显示追加行,很干净!
// Ahh better
$points = [
1,
5,
7,
+ 9,
];
尾随逗号用在其他语言
JavaScript
从一开始就允许在 JavaScript 数组文字中使用尾部逗号。 从 ECMAScript 5开始,对象文字中的尾部逗号是合法的,而在 ECMAScript 2017中,函数参数列表中的尾部逗号是合法的:
var numbers = [
1,
2,
3,
];
// ECMAScript 5
var stats = {
rebounds: 9,
fouls: 2,
points: 15,
};
// ECMAScript 2017
function track(
eventName,
eventValue,
) {
// ...
}
在 JavaScript 中,解构分配中也可以使用逗号结尾:
var {
rebounds,
points,
assists,
} = stats;
Ruby
这是一个在散列和数组上的逗号结尾的示例:
ruby_hash = {
first: '1st',
second: '2nd',
third: '3rd',
}
ruby_array = [
'1st',
'2nd',
'3rd',
]
Python
Python 示例看起来与 ruby 相同:
countries = [
'China',
'India',
'Mexico',
]
一个有趣的花絮,如果你忽略结尾的逗号,而又不小心将另一个项目添加到数组中,结果将是这样的:
countries = [
'China',
'India'
]
// 后来你添加了一个新值,但忘记了逗号
countries = [
'China',
'India'
'Mexico'
]
// The result would be...
['China', 'IndiaMexico']
Haskell
Haskell 以其“尾随逗号”样式(称为“Haskell样式”)而闻名:
data Settings = -- The user settings
{ has_sound :: Bool
, has_power :: Bool
, has_graphics :: Bool
, user_name :: String
, user_password :: String
, user_email :: Email
, stylesheet :: Style
}
该示例来自 StackOverflow 的答案;还有,我不认识 Haskell。
由于尾随逗号可能会在 JavaScript 中引起跨浏览器的问题,因此你可能在 JavaScript 中也看到过类似的样式:
var stats =
{ rebounds: 9
, fouls: 2
, points: 15
};
了解更多
在上周我们发布的 PHP 7.3 Alpha 1 发布版本中,你可以了解到 PHP 7.3所有突出的特性。PHP 7.3 将在今年晚些时候发布。
另外,请阅读 允许在函数调用中使用逗号结尾的 RFC 以获取有关 PHP 7.3 提案的详细信息。
作者 Sammy Kaye Powers 在提案传达方面表现非常出色。如果仔细阅读,可以了解到这个 RFC 如何讨论出 7.3 版本和之前被拒的 7.2 版本的区别。在 7.2 RFC 中的一次表决中提出将函数调用和函数定义放在一起,但当时以微弱的劣势被拒绝。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。