PHP 8.0 命名参数:告别参数顺序的噩梦
PHP 8.0 命名参数:告别参数顺序的噩梦
你有没有遇到过这种情况:调用一个函数,参数有七八个,中间还有几个可选参数,你只想改最后一个,却不得不把前面的默认值全写一遍?PHP 8.0 的命名参数(Named Arguments)就是来解决这个问题的。什么是命名参数
简单说,就是调用函数时可以指定参数名,而不用按顺序传递。function createUser($name, $email, $age = 18, $role = 'user', $active = true) {// 调用时,想设置 active 为 false,必须把前面的都写上createUser('张三', 'zhangsan@example.com', 18, 'user', false);email: 'zhangsan@example.com',命名参数的优势
createUser(name: '李四', email: 'lisi@example.com', role: 'admin');email: 'test@example.com',混合使用:位置参数 + 命名参数
可以把位置参数和命名参数混着用,但有个规则:位置参数必须在前面。createUser('赵六', 'zhaoliu@example.com', role: 'editor');createUser(name: '赵六', 'zhaoliu@example.com'); // 报错!实战场景
场景一:配置类函数
function connectDatabase(string $host = 'localhost',string $username = 'root',string $charset = 'utf8mb4'场景二:HTML 属性生成
htmlTag('div', content: '你好', class: 'container', id: 'main');场景三:配合 ... 展开运算符
'host' => '192.168.1.100','database' => 'production','password' => 'prod_password'connectDatabase(...$config);注意事项
greet(username: '张三'); // 错误!参数名是 name 不是 usernamearray_fill(start_index: 0, count: 5, value: 'hello');str_contains(haystack: 'Hello World', needle: 'World');function sum(...$numbers) {return array_sum($numbers);sum(a: 1, b: 2, c: 3); // $numbers = ['a' => 1, 'b' => 2, 'c' => 3]总结
建议在参数较多的函数调用中优先使用命名参数,特别是配置类、构建器类的场景。下一篇我们聊聊 PHP 8 的另一个重磅特性:Attributes(注解)。
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。