Menu
CoddyTech

Оператор нулевого слияния

Часть раздела Основы путешествия по 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