ZetCode

PHP 默认关键字

最后修改于 2025 年 4 月 16 日

PHP default 关键字在不同的上下文中具有多种用途。主要用于 switch 语句中作为备用情况,它也出现在数组解构和函数参数声明中。

基本定义

在 switch 语句中,default 指定当没有 case 匹配时要执行的代码。它是可选的,但为意外值提供了安全网。

对于数组,default 可以在解构赋值期间指定备用值。这可以防止在键不存在时出现未定义的索引错误。

在函数参数中,default 值使参数成为可选的。调用者可以省略带有默认值的参数,然后使用指定的值。

带有 default 的基本 switch 语句

此示例演示了 default 在 switch 语句中最常见的用法。

switch_default.php
<?php

declare(strict_types=1);

$day = "Tuesday";

switch ($day) {
    case "Monday":
        echo "Start of work week";
        break;
    case "Friday":
        echo "Almost weekend!";
        break;
    default:
        echo "Regular weekday";
}

switch 检查 $day 变量是否与特定情况匹配。当没有 case 匹配时,将执行 default 块。Default 充当未处理值的 catch-all。它通常位于 switch 语句的最后。

数组解构中的 default

此示例展示了在解构关联数组时使用默认值。

array_default.php
<?php

declare(strict_types=1);

$user = ['name' => 'John', 'age' => 30];

['name' => $name, 'role' => $role = 'guest'] = $user;

echo "Name: $name, Role: $role";

代码将数组值提取到变量中。role 键不存在,因此使用默认值 'guest'。这可以防止未定义的索引错误,同时提供合理的备用方案。Defaults 适用于索引数组和关联数组。

函数参数默认值

此示例演示了函数声明中的默认参数值。

function_default.php
<?php

declare(strict_types=1);

function greet(string $name, string $greeting = "Hello") {
    echo "$greeting, $name!";
}

greet("Alice");          // Uses default greeting
greet("Bob", "Hi");      // Overrides default

greet 函数使用默认值使 $greeting 参数成为可选的。调用者可以省略它以使用 "Hello" 或指定自定义问候语。默认参数必须在声明中的必选参数之后。

多个 Default 情况

此示例展示了 default 如何与多个 switch case 一起使用。

multiple_default.php
<?php

declare(strict_types=1);

$score = 75;

switch (true) {
    case $score >= 90:
        echo "Grade: A";
        break;
    case $score >= 80:
        echo "Grade: B";
        break;
    case $score >= 70:
        echo "Grade: C";
        break;
    default:
        echo "Grade: F";
}

switch 有条件地评估每个 case。default case 处理低于 70 的分数。由于 break 语句,只有一个 case 执行。此模式对于 if-elseif 会冗长的基于范围的条件很有用。

Match 表达式中的 Default

此示例演示了 PHP 8 的 match 表达式中的 default。

match_default.php
<?php

declare(strict_types=1);

$status = 404;

$message = match($status) {
    200 => 'OK',
    301 => 'Moved Permanently',
    404 => 'Not Found',
    default => 'Unknown Status'
};

echo $message;

match 表达式是 switch 的更简洁的替代方案。它的 default case 处理任何未列出的状态代码。与 switch 不同,match 执行严格比较并返回值。如果未涵盖所有可能的值,则需要 default。

Default 数组合并

此示例展示了在合并配置数组时使用默认值。

merge_default.php
<?php

declare(strict_types=1);

$defaults = ['color' => 'red', 'size' => 'medium'];
$userPrefs = ['color' => 'blue'];

$config = array_merge($defaults, $userPrefs);

print_r($config);

代码将默认值与用户偏好合并。$userPrefs 中缺失的键保留其默认值。此模式对于配置系统很常见。数组并集运算符 (+) 也可以使用,但对数字键的行为不同。

Default 类属性

此示例演示了类定义中的默认属性值。

class_default.php
<?php

declare(strict_types=1);

class Product {
    public string $name = 'Unknown';
    public float $price = 0.0;
    public bool $inStock = false;
}

$product = new Product();
echo "{$product->name}: \${$product->price}";

Product 类定义了所有属性的默认值。新实例从这些默认值开始,除非被覆盖。默认值确保对象始终具有有效的属性值。它们对于数据传输对象和配置类特别有用。

最佳实践

来源

PHP switch 文档

本教程通过示例介绍了 PHP default 关键字,展示了它在 switch 语句、数组、函数和类属性中的用法。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我已撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 教程