电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

PHP8.0新功能之Match表達(dá)式的使用

瀏覽:154日期:2022-09-09 15:05:37

上個(gè)月下旬PHP社區(qū)發(fā)布是PHP8第一個(gè),正式版本也將于今年年底發(fā)布。PHP8帶來來那個(gè)兩個(gè)最令人激動的特性:JIT和match表達(dá)式。

PHP8.0新功能之Match表達(dá)式的使用

本文我們要說另一個(gè)新引入的語法match表達(dá)式語法,可以說是PHP 8引入的最好的功能之一,它使用類似switch的語法。

PHP8.0新功能之Match表達(dá)式的使用

基本功能

$status = match($request_method) { ’post’ => $this->handlePost(), ’get’, ’head’ => $this->handleGet(), default => throw new Exception(’Unsupported’), };

用switch...case做對比,要實(shí)現(xiàn)上面的功能,代碼要略繁瑣一點(diǎn):

switch ($request_method) { case ’post’: $status = $this->handlePost(); break; case ’get’: case ’head’: $status = $this->handleGet(); break; default: throw new Exception(’Unsupported’); };

相比switch, match會直接返回值,無需中間變量(比如上例中的$status)。

表達(dá)式可以返回一個(gè)值

在每個(gè)分支可以被分配給一個(gè)變量。

$name = match(2) { 1 => ’One’, 2 => ’Two’, };

不必再將返回值分配給其他中變量,匹配的語句返回值可直接從match表達(dá)式中返回。

可匹配多個(gè)條件

match表達(dá)式可能包含一個(gè)或多個(gè)匹配條件,它們的行為類似于塊中的多個(gè)級聯(lián)case鍵switch。

match($request_method) { ’post’ => $this->handlePost(), ’get’, ’head’ => $this->handleGet(), };

滿足$request_method === ’get’和$request_method === ’head’兩個(gè)條件都會執(zhí)行$this->handleGet()。

每個(gè)分支只能包含一個(gè)表達(dá)式

與switch可以包含任意數(shù)量的表達(dá)式的塊不同,一條match語句只能包含一個(gè)表達(dá)式。

match($name) { ’XXX’ => init(); doth(); };

上面的語法錯誤的。=>只能有一個(gè)表達(dá)式。

隱含的break

match表達(dá)式的每個(gè)匹配分支僅允許一個(gè)表達(dá)式,并且無需switch塊一樣的break。

switch (’test’) { case ’test’: $this->doTest (); case ’send’: $this->sendmsg (); }

在switch...caser容易犯的錯誤是忘記了break語句,這會使流程直接進(jìn)入下一分支。在上面的switch塊中,缺少break;語句會使代碼$this->doTest()無法正常執(zhí)行執(zhí)行。

match (’test’) { ’test’ => $this->doTest (), ’send’ => $this->sendmsg (), };

match表達(dá)式無需顯式break語句即可工作。它只執(zhí)行一個(gè)match分支,并立即返回該值。

default分支

match語句支持一個(gè)default分支,該分支工作原理與switch...case塊中的default情況類似。如果沒有其他條件相匹配,將執(zhí)行default match分支。

match (’DEF’) { ’aaa’ => ..., ’bbb’ => ..., default => echo ’NO matching: ’ . $name, }; // 'NO matchin: DEFF'

match表達(dá)式必須符合條件

switch如果沒有匹配case鍵,則block靜默進(jìn)行代碼流。match表達(dá)式?jīng)]有。

在match表達(dá)式中,必須存在與表達(dá)式匹配的條件或default要處理的條件。如果沒有匹配項(xiàng),而且為設(shè)置default分支,match表達(dá)式將會引發(fā)UnhandledMatchError異常。

$value = 3; match($value) { 1 => ’One’, 2 => ’Two’, };

上面的代碼執(zhí)行時(shí)候會拋出錯誤:

Fatal error: Uncaught UnhandledMatchError in ...

matchUnhandledMatchError如果表達(dá)式中沒有匹配項(xiàng),則表達(dá)式將引發(fā)異常。

UnhandledMatchError是PHP 8中的新異常類,它擴(kuò)展了Error。有關(guān)所有PHP核心異常類的完整層次結(jié)構(gòu)。

該類可以很容易地?cái)U(kuò)展:

class UnhandledMatchError extends Error {}

對非強(qiáng)制類型的嚴(yán)格匹配

match表達(dá)式中最重要的設(shè)計(jì)選擇之一是它對非強(qiáng)制類型的匹配。

function read(mixed $key): string { return match ($key) { 1 => ’Integer 1’, ’1’ => ’String 1’, true => ’Bool true’, [] => ’Empty array’, [1] => ’Array [1]’, }; } read(1); // 'Integer 1' read(’1’); // 'String 1'

在典型的switch塊中,其大小寫是松散匹配的,即與==。在match表達(dá)式中,所有匹配的分支都經(jīng)過嚴(yán)格的比較(===)匹配。

在上面的代碼段中,每個(gè)單獨(dú)的分支都將匹配其值和類型。

匹配任意表達(dá)式

match 表達(dá)式允許給定值與表達(dá)式匹配。

match($httpst){ 404 => ’Page not found’, Response::REDIRECT => ’Redirect’, $client->getCode() => ’Client Error’, $response->getCode() => ’Response Error’, default => ’Unknown error’ };

表達(dá)式將按照其排列順序進(jìn)行求值。

match表達(dá)式將嘗試$httpst按以下順序進(jìn)行匹配:

1. $httpst === 404 2. $httpst === Response::REDIRECT 3. $httpst === $client->getCode() 4. $httpst === $response->getCode() 5. default

如果找到正匹配,則將不會對其他分支進(jìn)行嘗試,直接返回。

match VS switch

PHP8.0新功能之Match表達(dá)式的使用

向后兼容性影響

match表達(dá)式是PHP 8中的新語法。使用match表達(dá)式的代碼在較舊的PHP版本中將不起作用。

到此這篇關(guān)于PHP8.0新功能之Match表達(dá)式的使用的文章就介紹到這了,更多相關(guān)PHP8.0 Match表達(dá)式內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 原子吸收设备-国产分光光度计-光谱分光光度计-上海光谱仪器有限公司 | 上海道勤塑化有限公司 | 深圳市简易检测技术有限公司| 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 有福网(yofus.com)洗照片冲印,毕业聚会纪念册相册制作个性DIY平台 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 牛奶检测仪-乳成分分析仪-北京海谊| 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 复合肥,化肥厂,复合肥批发,化肥代理,复合肥品牌-红四方 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 锂离子电池厂家-山东中信迪生电源| 污水提升器,污水提升泵,污水提升装置-德国泽德(zehnder)水泵系统有限公司 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 |