Menu
CoddyTech

空值合并运算符

本课属于 Coddy PHP 学习旅程的“基础知识”单元。第 31 课,共 71 课。

空值合并运算符(??)提供了一种便捷的方式,让你在变量为 null 或不存在时使用默认值。处理可能缺失的数据时,这尤其有用。

语法会将 ?? 放在要检查的变量和备用值之间:

<?php
$username = null;

$displayName = $username ?? "Guest";
echo $displayName; // Guest
?>

PHP 会检查 $username 是否为 null。由于它的值为 null,运算符会改为返回 "Guest"。如果 $username 有值,就会使用该值。

<?php
$username = "Alice";

$displayName = $username ?? "Guest";
echo $displayName; // Alice
?>

即使变量完全没有定义,空合并运算符也能正常工作,且不会触发错误:

<?php
// $color 没有在任何地方定义
$selectedColor = $color ?? "blue";
echo $selectedColor; // blue
?>

这使得 ?? 比使用带有 isset() 检查的三元运算符更简洁。它非常适合在数据可能缺失时提供合理的默认值。

challenge icon

挑战

简单

从输入中读取两个值:一个字符串 nickname 和一个字符串 theme。

使用空合并运算符处理可能缺失的值:

  1. 创建一个变量 $userNickname,并将其设为 null。然后使用空合并运算符进行赋值:如果 $userNickname 存在且不为 null,就将其值赋给 $displayNickname;否则使用输入值 nickname。
  2. 创建一个变量 $userTheme,并将输入值 theme 赋给它。使用空合并运算符进行赋值:如果 $userTheme 存在且不为 null,就将其值赋给 $selectedTheme;否则使用 dark 作为默认值。
  3. 直接对未定义的变量 $language 使用空合并运算符(不要定义它),进行赋值:如果 $language 存在,就将其值赋给 $displayLanguage;否则使用 English 作为默认值。

按以下顺序将每个结果打印在新的一行:$displayNickname、$selectedTheme、$displayLanguage。

示例:

如果输入是 Player1 和 light,输出应为:

Player1
light
English

如果输入是 GuestUser 和 blue,输出应为:

GuestUser
blue
English

亲手试试

<?php
// 读取输入
$nickname = trim(fgets(STDIN));
$theme = trim(fgets(STDIN));

// TODO:在下方编写你的代码
// 1. 创建 $userNickname 并将其设为 null,然后用 ?? 为 $displayNickname 赋值
// 2. 创建 $userTheme 并将其设为输入的主题,然后用 ?? 为 $selectedTheme 赋值(默认值:说明中的确切文本)
// 3. 用 ?? 和未定义的 $language 为 $displayLanguage 赋值(默认值:说明中的确切文本)

// 输出结果(每个结果占一行)
echo $displayNickname . "\n";
echo $selectedTheme . "\n";
echo $displayLanguage . "\n";
?>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: PHP 在线编译器