php 8 的 match 用严格比较匹配分支,整数 200 和字符串 "200" 会进入不同分支。状态码来自查询参数时,可以先验证并转成整数,再统一查找对应结果。
直接比较整数和字符串的匹配结果
将以下代码保存为 status.php,执行 php status.php。分别把整数和字符串传给同一个函数。
<?php function describeRawStatus(int|string $status): string
{
return match ($status) {
200 => 'integer 200',
'200' => 'string 200',
default => 'other',
};
}
echo describeRawStatus(200), PHP_EOL;
echo describeRawStatus('200'), PHP_EOL;

依次输出 integer 200 和 string 200。
把外部状态码验证为整数后再匹配
把下面的代码追加到同一脚本。示例接受 100 到 599 的整数或可验证为整数的字符串。
function describeStatus(mixed $input): string
{
if (!is_int($input) && !is_string($input)) {
return 'Invalid status';
}
$status = filter_var($input, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 100, 'max_range' => 599],
]);
if ($status === false) {
return 'Invalid status';
}
return match ($status) {
200 => 'OK',
401, 403 => 'Access denied',
404 => 'Not found',
default => 'Other status',
};
}
foreach (['200', 403, '200x', 503] as $value) {
echo describeStatus($value), PHP_EOL;
}

四行结果依次为 OK、Access denied、Invalid status、Other status。
未命中分支时会发生什么
如果没有匹配分支且没有 default,PHP 会抛出 UnhandledMatchError。可以在测试脚本中观察。
try {
echo match (418) {
200 => 'OK',
};
} catch (UnhandledMatchError $error) {
echo 'No matching branch', PHP_EOL;
}
对开放的状态码输入,default 可以明确定义其他状态的处理方式。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











