Menu
Coddy logo textTech

Null Coalescing Operator

Часть раздела Основы путешествия по PHP на Coddy. Урок 31 из 71.

Оператор объединения с null (??) предоставляет удобный способ использовать значение по умолчанию, когда переменная равна null или не существует. Это особенно полезно при работе с данными, которые могут отсутствовать.

Синтаксис помещает ?? между проверяемой переменной и резервным значением:

<?php
$username = null;

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

PHP проверяет, равен ли $username значению null. Поскольку это так, оператор вместо этого возвращает "Guest". Если бы $username имела значение, использовалось бы оно.

<?php
$username = "Alice";

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

Оператор объединения с null также работает, когда переменная вообще не была определена, не вызывая ошибки:

<?php
// $color нигде не определён
$selectedColor = $color ?? "blue";
echo $selectedColor; // blue
?>

Это делает ?? более чистым, чем использование тернарного оператора с проверками isset(). Это отлично подходит для задания разумных значений по умолчанию, когда данные могут отсутствовать.

challenge icon

Задание

Легко

Считайте два значения из входных данных: строку nickname и строку theme.

Используйте оператор объединения с null для обработки потенциально отсутствующих значений:

  1. Создайте переменную $userNickname и установите её в null. Затем используйте оператор объединения с null, чтобы присвоить $displayNickname значение $userNickname, если оно существует и не равно null, в противном случае используйте входное значение nickname.
  2. Создайте переменную $userTheme и присвойте ей входное значение theme. Используйте оператор объединения с null, чтобы присвоить $selectedTheme значение $userTheme, если оно существует и не равно null, в противном случае используйте dark по умолчанию.
  3. Используйте оператор объединения с null напрямую с неопределенной переменной $language (не определяйте её), чтобы присвоить $displayLanguage значение $language, если оно существует, в противном случае используйте 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