我欲乘风九万里
梦的起点
心灵之声
珊瑚礁
编码之舞
梦中的微风
项目编码
聚合登录文档
建议
AI助手
php函数之match
PHP 的 match 表达式于 PHP 8.0 中引入。可以用于替换if和switch的表达式 在 PHP 8.0 之前,可以使用 switch 语句进行模式匹配。但是,switch 语句存在一些限制,例如: - 只能匹配单值。 - 匹配顺序很重要。 match 表达式旨在解决这些限制,并提供更灵活和强大的模式匹配功能。 与 switch 语句不同,match 表达式可以匹配任何表达式,包括数组、对象和回调函数。它还允许使用模式,例如通配符 (*) 和组捕获。 此外,match 表达式不需要匹配顺序,并且始终返回匹配臂的值。 一、match(true) 和 if 实现相同功能的代码对比 ```php function time_ago($timestamp){ $timestamp = is_numeric($timestamp) ? $timestamp : strtotime($timestamp); $timeElapsed = time() - $timestamp; return match(true) { $timeElapsed < 60 => $timeElapsed . "秒前", $timeElapsed < 3600 => round($timeElapsed / 60) . "分钟前", $timeElapsed < 86400 => round($timeElapsed / 3600) . "小时前", $timeElapsed < 2419200 => round($timeElapsed / 86400) . "天前", $timeElapsed < 29030400 => round($timeElapsed / 2419200) . "周前", default => round($timeElapsed / 29030400).'年前' }; } ``` ```php function time_ago($timestamp){ $timestamp = is_numeric($timestamp) ? $timestamp : strtotime($timestamp); $timeElapsed = time() - $timestamp; if ($timeElapsed < 60) { return $timeElapsed . "秒前"; } elseif ($timeElapsed < 3600) { $minutes = round($timeElapsed / 60); return $minutes . "分钟前"; } elseif ($timeElapsed < 86400) { $hours = round($timeElapsed / 3600); return $hours . "小时前"; } elseif ($timeElapsed < 604800) { $days = round($timeElapsed / 86400); return $days . "天前"; } elseif ($timeElapsed < 2419200) { $weeks = round($timeElapsed / 604800); return $weeks . "周前"; } elseif ($timeElapsed < 29030400) { $months = round($timeElapsed / 2419200); return $months . "个月前"; } else { $years = round($timeElapsed / 29030400); return $years . "年前"; } } ``` 二、match(value) 和 switch case实现相同功能的代码对比 ```php private function getRedirectUriByEquipment(string $state,string $scope,$equipment) { $url = match ($equipment) { WaUsersRelateThirdUserSourceEnum::douyin->name => '这是抖音平台', WaUsersRelateThirdUserSourceEnum::ali->name => '这是阿里平台', WaUsersRelateThirdUserSourceEnum::qq->name => '这是腾讯平台', WaUsersRelateThirdUserSourceEnum::weibo->name => '这是微博平台', default => '' }; return $url; } ``` ```php private function getRedirectUriByEquipment(string $state, string $scope, $equipment) { switch ($equipment) { case WaUsersRelateThirdUserSourceEnum::douyin->name: $url = '这是抖音平台'; break; case WaUsersRelateThirdUserSourceEnum::ali->name: $url = '这是阿里平台'; break; case WaUsersRelateThirdUserSourceEnum::qq->name: $url = '这是腾讯平台'; break; case WaUsersRelateThirdUserSourceEnum::weibo->name: $url = '这是微博平台'; break; default: $url = ''; } return $url; } ``` #### 以上代码示例可以清晰的看出,match比switch,if 代码简洁,易读。所以拥抱match吧
ysian
我雾化科所
1
聚合登录之创建应用篇
2024-07-30
644
0
2
php函数之match
2024-07-29
582
0
3
聚合登录之常见问题
2024-07-30
489
0
4
聚合登录之前后端示例代码
2024-07-30
483
0
5
聚合登录之获取登录链接
2024-07-30
422
0
6
服务器瘦身
2023-11-01
413
5
7
centos下升级openssl
2023-11-30
412
0
8
我的第一篇博客
2023-09-28
402
0
9
supervisor的安装与使用
2023-11-02
382
0
10
editor.md 代码块没有下拉框
2023-10-06
352
2
PHP [9]
linux [4]
sh [1]
闲谈 [1]
css [2]
redis [2]
Cluster集群 [1]
git [1]
centos [1]
webman [2]
工具 [1]
OAuth2.0 [1]
项目 [1]
初始化 [1]
thinkphp [1]
Nginx [1]
往事 [1]
Mysql [1]
支付宝 [2]
抖音 [2]
qq [2]
聚合 [1]
登录 [1]
聚合登录 [4]
cache [1]
html [1]
queue [1]
Workerman版本
4.1.15
Webman版本
1.5.9
PHP版本
8.3.6
MYSQL版本
8.2.24
操作系统
CENTOS