php 8 命名参数允许按参数名传值,提升可读性与安全性;支持位置与命名混合调用(位置参数必须在前),可跳过带默认值的中间参数,但不支持可变参数、引用参数及 call_user_func_array() 等动态调用。

PHP 8 的命名参数(Named Arguments)让你不再依赖参数位置,直接用参数名传值,代码更清晰、调用更安全。
基本写法:用 参数名: 值 的形式调用
函数定义保持不变,调用时改用命名方式:
- 传统位置调用:
greet("Alice", "Hi") - 命名参数调用:
greet(name: "Alice", greeting: "Hi")或greet(greeting: "Hi", name: "Alice")——顺序可互换
混合使用:位置参数必须在前,命名参数必须在后
允许部分位置 + 部分命名,但有严格顺序限制:
- ✅ 合法:
greet("Alice", greeting: "Hey")(第一个位置,第二个命名) - ❌ 错误:
greet(greeting: "Hey", "Alice")(命名后接位置 → 语法报错)
跳过默认参数:只传关心的值
当函数有带默认值的参数时,命名参数可自由省略中间项:
- 函数定义:
function createUser(string $name, ?string $email = null, int $age = 18, bool $active = true) - 只需激活状态和姓名:
createUser(name: "Bob", active: false)——$email和$age自动用默认值
适用范围与常见限制
命名参数支持大多数常规调用场景,但注意这些边界:
- ✅ 支持:普通函数、类方法、构造函数、匿名函数(若签名明确)
- ❌ 不支持:
call_user_func_array()(除非数组键全为字符串且匹配参数名)、可变参数(...$args)、引用参数(&$var)、动态变量函数调用(如$func(...)) - ⚠️ 必需参数不能跳过:无默认值的参数,无论是否命名,都必须提供值
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











