您现在的位置是:首页 > PHP框架交流PHP框架交流
PHP8.0新特性(5) Match 表达式
上善若水2024-03-05 10:24:34【PHP框架交流】 609人已围观
简介熟悉PHP8.0的新特性,Match表达式match匹配比较严格,会验证类型和值,但大多数情况下,Match都可以替代,而且语法更加简洁!官方文档:https://www.php.net/manua
熟悉PHP8.0的新特性,Match 表达式match匹配比较严格,会验证类型和值,但大多数情况下,Match都可以替代,而且语法更加简洁!
官方文档:https://www.php.net/manual/zh/control-structures.match.php
match 表达式基于值的一致性进行分支计算。 match表达式和 switch 语句类似, 都有一个表达式主体,可以和多个可选项进行比较。 与 switch 不同点是,它会像三元表达式一样求值。 与 switch 另一个不同点,它的比较是严格比较( ===)而不是松散比较(==)。 Match 表达式从 PHP 8.0.0 起可用。
新的 match 类似于 switch,并具有以下功能:
Match 是一个表达式,它可以储存到变量中亦可以直接返回。
Match 分支仅支持单行,它不需要一个 break; 语句。
Match 使用严格比较。
Match无法完全取代switch语句,但是可以替代switch语句的某些功能。
1.强类型比较,字符串数字和数字不相同。
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result, PHP_EOL;
//> Oh no!
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
2.match 表达式分支可以通过逗号分隔,包含多个表达式。 这是一个逻辑 OR,当多个分支表达式右侧相同时,就可以用这种缩写。类似于短路, True || $a=false
这个意思
$x = $a = $b = 1;
$result = match ($x) {
// 匹配分支:
1, 2, 3 => 5,
// 等同于以下三个分支:
($a = 4) => 4,
($b = 5) => 5,
};
print_r(compact('a', 'b', 'x'));
打印结果
Array
(
[a] => 1
[b] => 1
[x] => 1
)
当$x = 5;$a = $b = 1;
时候则打印结果
打印结果
Array
(
[a] => 1
[b] => 1
[x] => 1
)
3.match 表达式必须详尽列出所有情况。 如果主体表达式不能被任意分支条件处理, 会抛出 UnhandledMatchError。
当$x = $a = $b = 100;
时候则打印结果:
Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type int in D:\phpstudy_pro\WWW\testphp8_0\PHP8_0\match_expression.php on line 30
UnhandledMatchError: Unhandled match value of type int in D:\phpstudy_pro\WWW\testphp8_0\PHP8_0\match_expression.php on line 30
可以加入default ,
与Switch的类似,这样就不会报错了。
$result = match ($x) {
// 匹配分支:
1, 2, 3 => 5,
// 等同于以下三个分支:
($a = 4) => 4,
($b = 5) => 5,
default => 998,
};
很赞哦! (0)
相关文章
随机图文
-
spriingboot之mybatis 一对多关联查询
在接触mybatis时,只会使用mapper提供的单表查询,关联查询需要配置xml完成,整理了使用@Results注解完成表的关联查询.参考博客:https://blog.csdn.net/zhous -
shiro ajax返回登录成功
shiro默认在我们登录成功后会重定向到用户首页,有些时候,登录是使用ajax完成,登录成功后,会返回给我们登录成功的页面,尽管在ajax中页面不跳转我们可以手动跳转,但是还是有些不爽希望能返回jso -
爆笑逗B,逗笑的本领一流
1、凡是用钱可以解决的问题,我现在都解决不了。 2、有时候觉得自己挺重要,地球仪离开了我,就不转。 3、做事情一定要三思而后行:可不可以不做?可不可以明天做?可不可以让别人做? 4、重名的现象还是比较普遍的,今天我遇到一个人名叫铁牛,感觉这个名字真的很重。 我看起来是不是很忧郁的样子,其实我是个逗B! 5、女友怀孕后,很多事情都发生了变化。比如。。。。。。。我的住址和手机号码。 6、我 -
php对象当数组使用 接口ArrayAccess对象下标取值赋值 php进阶
php对象当数组使用,一个对象如果没有实现ArrayAccess结果是无法采用下标的方式去调用赋值和获取值的,目前主流的php框架查询出的集合对象都可以使用数组下标的方式去进行赋值.一个简单的demo