自 PHP 7.3 开始将允许函数传参以逗号结尾

PHP

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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/php-trailing-co...

译文地址:https://learnku.com/php/t/55274

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!