默认参数与可变参数
在 PHP 函数中使用默认值和可变参数。
默认参数与可变参数 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
默认参数值
默认值允许调用方省略参数。未传入参数时,将使用默认值:
<?php
function createUser(string $name, string $role = 'viewer'): string {
return "$name ($role)";
}
echo createUser('Alice'); // Alice (viewer)
echo createUser('Bob', 'admin'); // Bob (admin)默认值规则
默认参数的重要规则:
- 带有默认值的参数必须放在必需参数之后
- 默认值必须是常量表达式,不能是函数调用或变量
- PHP 8 的命名参数放宽了参数顺序要求
可空参数
使用 ?type 允许 NULL 作为有效参数,并将 NULL 设为默认值:
<?php
function findUser(?int $id = null): string {
if ($id === null) {
return 'Searching all users';
}
return "User #$id";
}
echo findUser(); // Searching all users
echo findUser(42); // User #42带 ... 的可变参数函数
在参数前使用 ...,即可将数量不定的参数作为数组接收:
<?php
function sum(int ...$numbers): int {
return array_sum($numbers);
}
echo sum(1, 2, 3); // 6
echo sum(10, 20, 30, 40); // 100带必需参数的可变参数
您可以将必需参数与末尾的可变参数结合使用:
<?php
function logMessage(string $level, string ...$messages): void {
foreach ($messages as $msg) {
echo "[$level] $msg" . PHP_EOL;
}
}
logMessage('INFO', 'App started', 'Config loaded');调用中的展开运算符
调用函数时使用 ...,即可将数组展开为独立参数:
<?php
function add3(int $a, int $b, int $c): int {
return $a + $b + $c;
}
$args = [1, 2, 3];
echo add3(...$args); // 6
$extra = [4, 5];
echo add3(1, ...$extra); // 10命名参数(PHP 8)
命名参数允许您按参数名称传递值,而不必遵循参数顺序:
<?php
function createTag(string $tag, string $content, string $class = ''): string {
$cls = $class ? " class=\"$class\"" : '';
return "<$tag$cls>$content</$tag>";
}
// Skip $class, pass $content by name
echo createTag(content: 'Hello', tag: 'p');
// <p>Hello</p>命名参数与内置函数
命名参数同样适用于 PHP 内置函数:
<?php
$arr = [3, 1, 4, 1, 5];
// Traditional positional
$result1 = array_slice($arr, 1, 3);
// Named arguments
$result2 = array_slice(array: $arr, offset: 1, length: 3);
print_r($result1); // [1, 4, 1]func_get_args() 遗留用法
在 PHP 5.6 的可变参数语法出现之前,通常使用 func_get_args() 访问所有参数。您可能会在遗留代码中看到它:
<?php
function legacySum(): int {
$args = func_get_args();
return array_sum($args);
}
echo legacySum(1, 2, 3, 4); // 10
// Modern: use int ...$numbers instead带类型提示的可变参数
将类型提示与可变参数结合使用,以实现严格的输入检查:
<?php
declare(strict_types=1);
function joinStrings(string $sep, string ...$parts): string {
return implode($sep, $parts);
}
echo joinStrings('-', 'a', 'b', 'c'); // a-b-c
// joinStrings('-', 'a', 42); // TypeError in strict mode结合默认参数和命名参数
命名参数与默认值配合使用,可以提供最大的灵活性:
<?php
function sendEmail(
string $to,
string $subject,
string $body = '',
bool $html = false
): bool {
// simulate send
return true;
}
// Skip $body, pass $html by name
sendEmail('a@b.com', 'Hi', html: true);快速检查
在 PHP 函数定义中,... 运算符的作用是什么?
回顾:默认参数和可变参数
总结:
- 默认值允许使用可选参数
- 带默认值的参数必须放在必需参数之后
?type允许参数为 NULL,并支持可选默认值...$args会将可变参数收集到数组中- 展开运算符
...$arr会在调用位置展开数组 - 命名参数(PHP 8)按名称而不是按位置传递
常见问题解答
「默认参数与可变参数」课时是免费的吗?
是的 — 「默认参数与可变参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「默认参数与可变参数」这节课中我会学到什么?
在 PHP 函数中使用默认值和可变参数。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「默认参数与可变参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 定义与调用函数
- 默认参数与可变参数
- 变量作用域:局部与全局
- 匿名函数与闭包