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,以获取有关此新语法功能的更多详细信息。