0Pricing
PHP Academy · 课时

默认参数与可变参数

在 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义与调用函数
  2. 默认参数与可变参数
  3. 变量作用域:局部与全局
  4. 匿名函数与闭包
← 返回 PHP Academy