Match 表达式与命名参数
使用 match 替代冗长的 switch,并使用命名参数提升清晰度。
Match 表达式与命名参数 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
match 表达式
PHP 8.0 引入了 match,它是 switch 的简洁替代方案,使用严格相等比较(===)并返回一个值。
match 与 switch
主要区别包括:match 使用严格比较,没有贯穿执行,并且是一个表达式(会返回值)。
<?php
$status = 2;
$label = match($status) {
1 => "active",
2 => "inactive",
3 => "banned",
default => "unknown",
};
echo $label; // "inactive"每个分支包含多个条件
请使用逗号分隔多个 match 值,以便让它们产生相同的结果。
<?php
$code = 404;
$type = match($code) {
200, 201, 202 => "success",
400, 422 => "client error",
404 => "not found",
500, 503 => "server error",
default => "other",
};
echo $type; // "not found"match 在没有匹配项时抛出异常
如果没有分支匹配且不存在 default,PHP 会抛出 UnhandledMatchError;而 switch 会静默地继续执行。
将 match 作为表达式使用
由于 match 会返回一个值,因此可以将它内联使用,例如作为函数参数、在 return 语句中,或在字符串插值中使用。
<?php
echo "Status: ".match($active) {
true => "ON",
false => "OFF",
};命名参数
PHP 8.0 的命名参数允许您按参数名称向函数传递参数,并且参数顺序可以任意。
<?php
function makeTag(string $tag, string $content, string $class = ""): string {
return "<$tag class=\"$class\">$content</$tag>";
}
echo makeTag(content: "Hello", tag: "p", class: "lead");命名参数的优势
命名参数可以提高具有多个参数的函数的可读性,允许跳过可选参数,并明确每个值所代表的含义。
与内置函数结合使用命名参数
命名参数同样适用于 PHP 内置函数。
<?php
$arr = [3, 1, 4, 1, 5];
$result = array_slice(array: $arr, offset: 1, length: 3, preserve_keys: true);混合使用命名参数和位置参数
您可以混合使用位置参数和命名参数,但命名参数必须位于位置参数之后。
<?php
str_contains(haystack: "Hello World", needle: "World");
// or positional then named:
str_contains("Hello World", needle: "World");array_map 中的命名参数
对于参数顺序容易混淆的可变参数内置函数,命名参数尤其有用。
实际代码中的 match
请使用 match 替换冗长的 if/elseif 链,用于 HTTP 方法路由、状态码映射和类似枚举的判断。
<?php
$handler = match($_SERVER["REQUEST_METHOD"]) {
"GET" => new GetHandler(),
"POST" => new PostHandler(),
"DELETE" => new DeleteHandler(),
default => throw new InvalidArgumentException("Unsupported method"),
};总结
match 提供严格、完整且不会贯穿执行的分支处理。命名参数可以提高调用位置的可读性。这两者都是 PHP 8.0 的重要改进。
快速检查
当没有 match 分支匹配且不存在 default 时,会发生什么?
常见问题解答
「Match 表达式与命名参数」课时是免费的吗?
是的 — 「Match 表达式与命名参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「Match 表达式与命名参数」这节课中我会学到什么?
使用 match 替代冗长的 switch,并使用命名参数提升清晰度。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Match 表达式与命名参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Match 表达式与命名参数
- 空安全运算符与联合类型
- 枚举(Enums)
- Fiber:协作式并发