当前位置: 首页 > news >正文

php8 match

刚从 php7 升级到 php8 时

我在使用 switch 语句,结果出现了一个提示:

"'switch' statement can be converted to 'match' expression"

翻译过来就是:

'switch'语句可以转换为'match'表达式

我当时在想,match 应该是php8 的新特性,之前有去搜索了解php8 相关的,因为没有实际使用,所以还是缺乏相关的知识。

所以今天就来说一下,php8 新特性:match

首先,我是在使用 switch 语句时,弹出可以使用 match,那么这两个是否有什么相关联的呢?

按照官方给的说明是:

match 表达式跟 switch 语句相似,但是有以下关键区别:

  • match 比较分支值,使用了严格比较 (===), 而 switch 语句使用了松散比较
  • match 表达式会返回一个值
  • match 的分支不会像 switch 语句一样, 落空时执行下个 case
  • match 表达式必须彻底列举所有情况

match 表达式结构

<?php
$return_value = match (subject_expression) {single_conditional_expression => return_expression,conditional_expression1, conditional_expression2 => return_expression,
};

match 的基础用法

<?php
$food = 'cake';$return_value = match ($food) {'apple' => 'This food is an apple','bar' => 'This food is a bar','cake' => 'This food is a cake',
};var_dump($return_value);

以上示例会输出:

string(19) "This food is a cake"

需要注意:

  • 不一定要使用 match 表达式的结果
  • match 表达式必须使用分号 ; 结尾

match 表达式和 switch 语句类似, 逐个检测匹配分支。一开始不会执行代码。 只有在所有之前的条件不匹配主体表达式时,才会执行剩下的条件表达式。 只会执行返回的表达式所对应的匹配条件表达式,例如:

<?php
$result = match ($x) {foo() => ...,$this->bar() => ..., // 如果 foo() === $x,不会执行 $this->bar()$this->baz => beep(), // 只有 $x === $this->baz 时才会执行 beep() // 等等
};

match 表达式分支可以通过逗号分隔,包含多个表达式。 这是一个逻辑 OR,当多个分支表达式右侧相同时,就可以用这种缩写

<?php
$result = match ($x) {// 匹配分支:$a, $b, $c => 5,// 等同于以下三个分支:$a => 5,$b => 5,$c => 5,
};

default 模式是个特殊的条件。 当之前的条件都不匹配时,会匹配到该模式。 例如:

<?php
$expressionResult = match ($condition) {1, 2 => foo(),3, 4 => bar(),default => baz(),
};

注意:多个 default 模式将会触发 E_FATAL_ERROR 错误

match 表达式必须详尽列出所有情况。 如果主体表达式不能被任意分支条件处理, 会抛出 UnhandledMatchError

示例:

<?php
$condition = 5;try {match ($condition) {1, 2 => foo(),3, 4 => bar(),};
} catch (\UnhandledMatchError $e) {var_dump($e);
}

以上示例会输出:

object(UnhandledMatchError)#1 (7) {["message":protected]=>string(33) "Unhandled match value of type int"["string":"Error":private]=>string(0) ""["code":protected]=>int(0)["file":protected]=>string(9) "/in/ICgGK"["line":protected]=>int(6)["trace":"Error":private]=>array(0) {}["previous":"Error":private]=>NULL
}

使用 match 表达式处理非一致性检查

可以使用 match 表达式将 true 作为主项表达式来处理非一致性条件的情况

针对整数范围,使用宽泛的表达式匹配分支,示例:

<?php$age = 23;$result = match (true) {$age >= 65 => 'senior',$age >= 25 => 'adult',$age >= 18 => 'young adult',default => 'kid',
};var_dump($result);

会输出:

string(11) "young adult"

针对字符串内容,使用宽泛的表达式匹配分支,示例:

<?php$text = 'Bienvenue chez nous';$result = match (true) {str_contains($text, 'Welcome') || str_contains($text, 'Hello') => 'en',str_contains($text, 'Bienvenue') || str_contains($text, 'Bonjour') => 'fr',// ...
};var_dump($result);

会输出:

string(2) "fr"

相关文章:

php8 match

刚从 php7 升级到 php8 时 我在使用 switch 语句&#xff0c;结果出现了一个提示&#xff1a; "switch statement can be converted to match expression" 翻译过来就是&#xff1a; switch语句可以转换为match表达式 我当时在想&#xff0c;match 应该是php8 的…...

ADS-B接收机Radarcape

1.设备简介 Radarcape是一款便携、高性能、功能强大的ADS-B地面接收机。Radarcape的设备清单包含&#xff1a;ADS-B接收机主机&#xff0c;专业级ADS-B天线&#xff0c;GPS天线&#xff0c;电源线&#xff0c;网线。 2. 功能特点 Radarcape可以通过网口输出飞机的原始数据D…...

软件测评师2012年下半年考试真题<更新中。。。>

1.2012 年下半年全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试日期是 11月4号。 2.在 CPU 中&#xff0c;控制器 不仅要保证指令的正确执行&#xff0c;还要能够处理异常事件。 3.循环冗余校验码&#xff08;CRC) 利用生成多项式进行编码。设数据位为 k 位…...

ChatGPT 使用 拓展资料:开始构建你的优质Prompt

ChatGPT 使用 拓展资料:开始构建你的优质Prompt...

Hystrix原理

一.概述 在软件架构领域&#xff0c;容错特指容忍并防范局部错误&#xff0c;不让这种局部错误不断扩大。我们在识别风险领域&#xff0c;风险可以分为已知风险和未知风险&#xff0c;容错直接应对的就是已知风险&#xff0c;这就要求针对的场景是&#xff1a;系统之间调用延时…...

内网外网分离模式下,通过网关转发,来部署前后端分离的系统

前言 最近为某银行系统部署了一套商城系统&#xff0c;网络环境比较特别&#xff0c;思路记录下&#xff0c;其中商场系统使用前后端分离模式部署。 该银行网络环境&#xff1a; 外网服务器&#xff1a;外网可以访问到它&#xff0c;不能访问外网。 网关服务器&#xff1a;跟…...

基于 Amazon API Gatewy 的跨账号跨网络的私有 API 集成

一、背景介绍 本文主要讨论的问题是在使用 Amazon API Gateway&#xff0c;通过 Private Integration、Private API 来完成私有网络环境下的跨账号或跨网络的 API 集成。API 管理平台会被设计在单独的账号中(亚马逊云科技提供的是多租户的环境)&#xff0c;因为客观上不同业务…...

SSH远程连接时报错kex_exchange_identification: Connection closed by remote host

简介 在SSH服务器上进行远程内容时&#xff0c;会经常出现kex_exchange_identification: Connection closed by remote host内容&#xff0c;主要是由于远程计算机登录节点的数量限制问题。 解释 在 SSH 服务器上&#xff0c;最大并发登录会话数是由 ‘MaxSessions’ 参数来…...

一、CNNs网络架构-基础网络架构

目录 1.LeNet 2.AlexNet 2.1 激活函数&#xff1a;ReLU 2.2 随机失活&#xff1a;Droupout 2.3 数据扩充&#xff1a;Data augmentation 2.4 局部响应归一化&#xff1a;LRN 2.5 多GPU训练 2.6 论文 3.ZFNet 3.1 网络架构 3.2 反卷积 3.3 卷积可视化 3.4 ZFNet改…...

[开发|C++] C++的基本运算符说明笔记

基本运算符说明 C是一种功能强大的编程语言&#xff0c;提供了多种运算符来执行各种基本操作。下面是一些常见的C基本运算符及其说明&#xff1a; 算术运算符&#xff1a; &#xff1a;加法运算符&#xff0c;用于执行两个操作数的相加操作。 -&#xff1a;减法运算符&#xf…...

抖音定位功能的作用

随着智能手机和社交网络的普及&#xff0c;人们日常生活中对于位置信息的需求也越来越高。而抖音作为一款以短视频为主的社交应用&#xff0c;其定位技术也备受关注。本文将就抖音的定位功能进行探究&#xff0c;介绍抖音如何获取、处理和利用用户的位置信息&#xff0c;并探讨…...

阿里 P9 推荐的 Spring 领域巅峰之作,直接颠覆了我对 Spring 的认知

写在前面 你第一次接触 spring 框架是在什么时候&#xff1f;相信很多人和我一样&#xff0c;第一次了解 spring 都不是做项目的时候用到&#xff0c;而是在网上看到或者是听到过一个叫做 spring 的框架&#xff0c;这个框架号称完爆之前的 structs 和 structs2&#xff0c;吸…...

R语言结构方程模型(SEM)在生态学领域中的实践应用

结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0c;利用图形化模型方式清晰展示研究系统中变量间的因果网络关系&#xff0c;…...

Java设计模式-模板方法模式

简介 在软件开发中&#xff0c;设计模式是一种被广泛采用的方法&#xff0c;用于解决常见的设计问题。模板方法模式是其中一种重要的设计模式之一&#xff0c;它提供了一种将算法的结构骨架固定&#xff0c;但允许子类实现具体步骤的机制。 模板方法模式是一种行为型设计模式…...

Start JDKFlightRecorder--人工翻译

可以同时运行多个JFR记录&#xff0c;并且每个JFR记录都可以使用不同的配置&#xff0c;你可以使用不同的JFR记录去捕获不同的事件集。但是&#xff0c;为了使JFR内部逻辑更加精简&#xff0c;生成的记录始终包含当时活动的所有记录的所有事件的并集。这意味着&#xff0c;运行…...

Python3安装pyhanlp最佳解决方法

1、Hanlp介绍 Hanlp是一款中文自然语言处理工具。Hanlp支持多种自然语言处理任务&#xff0c;包括分词、词性标注、命名实体识别、依存句法分析、情感分析、文本分类等。其主要优点包括&#xff1a; 高准确率&#xff1a;Hanlp采用了基于神经网络的分词方法&#xff0c;有效提…...

漏洞管理基础知识

漏洞管理对于端点安全至关重要&#xff0c;是在安全漏洞导致漏洞之前清除安全漏洞的最主动方法之一。 什么是漏洞 漏洞是软件中的错误代码段&#xff0c;会导致软件崩溃或以程序员从未预料到的方式做出响应。黑客可以利用漏洞对计算机系统进行未经授权的访问或对计算机系统执行…...

WBS项目分解的7大基本原则

制定和分解WBS&#xff0c;需要遵循的基本原则&#xff1a; 1、唯一性 每一项工作任务在WBS中是唯一的。 WBS项目分解的7大基本原则 2、负责制 每一项任务都需要明确责任人&#xff0c;一人负责&#xff0c;其他人参与。 3、可测量性 每一项任务都应该是可以量化和测量的&#…...

PoseiSwap IDO在Bounce上启动在即,如何参与?

目前&#xff0c;Nautilus Chain 生态基本完成测试&#xff0c;并即将在不久上线主网。PoseiSwap 作为 Nautilus Chain 上的首个 DEX&#xff0c;也即将面向市场并上线正式版本。我们看到&#xff0c; PoseiSwap 也正式发布了新的市场进程&#xff0c;基于其治理代币 POSE 的 I…...

Linux基本指令介绍

目录 前言 指令操作与图形化界面的对比 adduser passwd whoami ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 && rm 指令 man指令 cp指令 mv指令 cat&#xff08;显示文件内容&#xff08;全部&#xff09;&#xff0c;且不可修改的&#xff09;…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...