php 8.0 的 match 表达式不支持单分支多值逻辑运算(如 1 || 2),但可用逗号分隔多个值实现等效功能,如 1, 2, 3 => 'small',所有值严格比较,任一匹配即执行该分支。

PHP 8.0 的 match 表达式本身**不支持单个分支直接列出多个值(如 1 || 2 || 3 => ...)**,但它提供了更清晰、更安全的替代方式来实现“匹配多个值执行同一逻辑”。
用逗号分隔多个条件值
这是最常用、最推荐的方式:在同一个分支中,用逗号分隔多个可能的匹配值,所有值共享同一个返回结果或表达式。
语法格式:
```phpmatch ($value) {
1, 2, 3 => 'small',
4, 5, 6 => 'medium',
7, 8, 9 => 'large',
default => 'unknown'
};
```
说明:
- 每个逗号分隔的值都会被逐一严格比较(===),只要有一个匹配,就执行该分支;
- 不需要写多个重复分支,避免冗余和维护问题;
- 注意:逗号不是“或”操作符,而是
match语法内建的多值匹配机制。
用数组 + in_array() 配合 match(不推荐,仅作对比)
虽然可行,但违背了 match 的设计初衷(简洁、高效、无副作用),且失去类型安全和编译时检查优势:
$result = match (true) {
in_array($value, [1, 2, 3]) => 'small',
in_array($value, [4, 5, 6]) => 'medium',
default => 'unknown'
};
```
⚠️ 缺点明显:
-
in_array()是运行时函数调用,性能略低; - 无法被静态分析工具优化或校验;
- 容易误写成
match ($value)后再用in_array,导致逻辑混乱。
匹配范围值?需手动展开或改用 if-else
match 不支持区间语法(如 1..9)。若需匹配连续整数范围,必须显式列出,或退回到 if-elseif-else:
// ✅ 显式列举(适合小范围)
$size = match ($n) {
1, 2, 3, 4, 5 => 'tiny',
6, 7, 8, 9, 10 => 'small',
default => 'other'
};
// ✅ 范围大时,用 if 更清晰
if ($n >= 1 && $n $size = 'tiny';
} elseif ($n >= 6 && $n $size = 'small';
} else {
$size = 'other';
}
```
匹配多种类型值(如 int 和 string)
match 支持混合类型分支,但要注意严格比较规则:
$input = '2';
$result = match ($input) {
1, 2, 3 => 'number', // 这里不会匹配 '2',因为 '2' !== 2
'1', '2', '3' => 'string digit', // ✅ 正确匹配
default => 'other'
};
```
关键点:
- 匹配基于
===,类型和值都必须一致; - 若需松散匹配,
match不适用,应改用switch或if; - 可混合写不同类型的字面量,只要逻辑合理(例如区分
null、false、0等)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











