这篇文章主要讲解了“怎么使用PHP8.0新特性之匹配表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”怎么使用PHP8.0新特性之匹配表达式”吧!
上个月下旬PHP社区发布是PHP8第一个,正式版本也将于今年年底发布.PHP8带来来那个两个最令人激动的特性:JIT和匹配表达式。
本文我们要说另一个新引入的语法匹配表达式语法,可以说是PHP 8引入的最好的功能之一,它使用类似开关的语法。
基本功能
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;,, };
上面的代码执行时候会抛出错误: