PHP 8 ::匹配表达式
MatchExpressionv2RFC已通过,并以PHPv8.0的稳定版本为目标!RFC仍然为将来的改进留有余地(在RFC中指出),但是现在我们得到了单行表达式,这些表达式为匹配的表达式提供了简洁的简洁语法。
由于 match(){} 是 expression,您可以通过赋值或return 不必赋给局部变量来捕获值 :
//前
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;
}
//后
$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 表达式表示当您忘记break 作为switch 案件的一部分 时,不会意外掉线 。缺少条件(没有提供默认值)会导致UnhandledMatchError match表达式引发 异常。
匹配还允许您将多个匹配项用逗号组合为一个:
echo match ($x) {
1, 2 => 'Same for 1 and 2',
3, 4 => 'Same for 3 and 4',
};太酷了,什么时候可以开始使用比赛?
PHP8GA(一般可用性)版本于2020年11月26日发布,这意味着您可以在今年晚些时候开始使用匹配表达式!请务必查看MatchExpressionv2RFC,以获取有关此新语法功能的更多详细信息。