PHP 8 即将到来的 Switch 便捷写法 - Match 表达式
Match Expression v2 RFC 已经通过,目标是稳定发布 PHP v8.0!RFC 仍然为未来的改进留有空间 (在 RFC 中注明),但是目前我们得到的单行表达式为匹配表达式提供了一种干净、简洁的语法。
由于 Match() {}
字符串是一个 expression
(表达式),所以您可以通过赋值或者通过 return
来获取值,而不必赋值给局部变量:
// Before
switch ($this->lexer->lookahead['type']) {
case Lexer::T_SELECT:
$statement = $this->SelectStatement();
break;
case Lexer::T_UPDATE:
$statement = $this->UpdateStatement();
break;
case Lexer::T_DELETE:
$statement = $this->DeleteStatement();
break;
default:
$this->syntaxError('SELECT, UPDATE or DELETE');
break;
}
// After
$statement = match ($this->lexer->lookahead['type']) {
Lexer::T_SELECT => $this->SelectStatement(),
Lexer::T_UPDATE => $this->UpdateStatement(),
Lexer::T_DELETE => $this->DeleteStatement(),
default => $this->syntaxError('SELECT, UPDATE or DELETE'),
};
正如您在上面看到的,match
(匹配) 这个表达式的意思是,当您的 switch
忘记了一个 break
时,并不会意外的失败。缺少条件 (且未提供默认值) 会导致匹配表达式抛出异常 UnhandledMatchError
。
match 还允许您使用逗号将多个匹配项合并为一个:
echo match ($x) {
1, 2 => 'Same for 1 and 2',
3, 4 => 'Same for 3 and 4',
};
酷,我什么时候可以开始使用 match?
PHP 8 GA (General Availability) 发布日期为 2020年11月26日,这意味着您可以在今年晚些时候开始使用匹配表达式!请务必查看 Match Expression v2 RFC 以了解有关此新语法特性的进一步详细信息。。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
有多条语句的怎么做呢? 用逗号?分号分割?
关注鸟哥的微信公众号吧,讲的比这个好
工作中用了下,发现,这只能写一行的箭头函数,没啥鸟用,,,
感觉语法越来越趋近于js,不知道是不是好事情
鸟哥写的match的讲解,供参考,比这个说的好 www.laruence.com/2020/07/13/6033.h...
学到了