怎么使用PHP8.0新特性之匹配表达式

  介绍

这篇文章主要讲解了“怎么使用PHP8.0新特性之匹配表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”怎么使用PHP8.0新特性之匹配表达式”吧!

上个月下旬PHP社区发布是PHP8第一个,正式版本也将于今年年底发布.PHP8带来来那个两个最令人激动的特性:JIT和匹配表达式。

怎么使用PHP8.0新特性之匹配表达式

本文我们要说另一个新引入的语法匹配表达式语法,可以说是PHP 8引入的最好的功能之一,它使用类似开关的语法。

怎么使用PHP8.0新特性之匹配表达式

基本功能

status 美元;=,匹配(request_method美元),{,   & # 39;文章# 39;,=祝辞,$ this→handlePost (),,   & # 39;得到# 39;,,& # 39;头# 39;,=祝辞,$ this→handleGet (),,   default =祝辞,throw  new  \异常(& # 39;支持# 39;),,   };

用开关……这样做对比,要实现上面的功能,代码要略繁琐一点:

switch  (request_method美元),{,   case  & # 39;文章# 39;:,   status 美元;=,$ this→handlePost (),,   休息,,   case  & # 39;得到# 39;:,   case  & # 39;头# 39;:,   status 美元;=,$ this→handleGet (),,   休息,,   默认值:,   throw  new  \异常(& # 39;支持# 39;),,   };

相比开关,比赛会直接返回值,无需中间变量(比如上例中美元的状态)。

<强>表达式可以返回一个值

在每个分支可以被分配给一个变量。

name 美元;=,匹配(2),{,   1,=祝辞,& # 39;一个# 39;,,   2,=祝辞,& # 39;两个# 39;,,   };

不必再将返回值分配给其他中变量,匹配的语句返回值可直接从匹配表达式中返回。

<强>可匹配多个条件

匹配表达式可能包含一个或多个匹配条件,它们的行为类似于块中的多个级联情况下键开关。

匹配(request_method美元),{,   & # 39;文章# 39;,=祝辞,$ this→handlePost (),,   & # 39;得到# 39;,,& # 39;头# 39;,=祝辞,$ this→handleGet (),,   };

满足request_method美元===& # 39;得到# 39;和$ request_method===& # 39;头# 39;两个条件都会执行$ this→handleGet ()。

<强>每个分支只能包含一个表达式

与开关可以包含任意数量的表达式的块不同,一条匹配语句只能包含一个表达式。

匹配(名字),{,   & # 39;xxx # 39;,=祝辞,   init (),,   作();,   };

上面的语法错误的。=祝辞只能有一个表达式。

<>强隐含的打破

匹配表达式的每个匹配分支仅允许一个表达式,并且无需开关块一样的休息。

switch (& # 39;测试# 39;),{,   case  & # 39;测试# 39;:,   $ this→doTest  (),   case  & # 39;发送# 39;:,   $ this→sendmsg  (),   }

在开关……凯撒容易犯的错误是忘记了打破语句,这会使流程直接进入下一分支。在上面的切换块中,缺少休息;语句会使代码$ this→点()无法正常执行执行。

match (& # 39;测试# 39;),{,   & # 39;测试# 39;,=祝辞,$ this→doTest  (),,   & # 39;发送# 39;,=祝辞,$ this→sendmsg  (),,   };

匹配表达式无需显式打破语句即可工作。它只执行一个匹配分支,并立即返回该值。

<强>默认分支

匹配语句支持一个默认分支,该分支工作原理与开关……情况下块中默认的情况类似。如果没有其他条件相匹配,将执行默认匹配分支。

match  (& # 39; def # 39;), {,   & # 39;aaa # 39;,=祝辞,…,,   & # 39;bbb # 39;,=祝辞,…,,   default =祝辞,echo  & # 39; NO 匹配:,& # 39;,只美元的名字,,   },,   ,//,“NO  matchin:, DEFF"

<强>匹配表达式必须符合条件

开关如果没有匹配键,则块静默进行代码流.match表达式没有。

在匹配表达式中,必须存在与表达式匹配的条件或违约要处理的条件。如果没有匹配项,而且为设置默认分支,匹配表达式将会引发\ UnhandledMatchError异常。

value 美元;=,3,,   匹配(美元值),{,   1,=祝辞,& # 39;一个# 39;,,   2,=祝辞,& # 39;两个# 39;,,   };

上面的代码执行时候会抛出错误:

怎么使用PHP8.0新特性之匹配表达式