Оператор объединения с null (??)

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Оператор объединения с null (`??`), появившийся в PHP 7, — это элегантный способ избавиться от постоянных проверок с помощью `isset()`. Он позволяет задать значение по умолчанию для переменной, если она не определена или равна `null`. Это делает код более чистым, коротким и читаемым, а также помогает избежать предупреждений (Notice). В этом тренажере мы пройдем путь от основ синтаксиса до практического применения оператора `??` в работе с массивами и формами. Вы научитесь заменять старые конструкции `if-isset` на современный лаконичный код, предсказывать результат и исправлять ошибки.

Список тем

Основы синтаксиса оператора ??

id: 38930_task_1

Оператор объединения с null состоит из двух вопросительных знаков. Он проверяет левый операнд, и если тот `null` или не существует, возвращает правый. Заполните пропуск, чтобы переменной `$username` было присвоено значение 'Guest', так как переменная `$name` не определена.

Заполните пропуски
// Переменная $name не существует
$username = $name input1S 'Guest';
echo $username;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Когда переменная определена

id: 38930_task_2

Что выведет этот код? Оператор `??` срабатывает только если переменная слева от него не определена или равна `null`. В данном случае переменная `$user_input` имеет конкретное значение.

Выберите правильный вариант ответа
$user_input = 'Alice';
$name = $user_input ?? 'Anonymous';
echo $name;
Сообщения
Проверить
Показать подсказку

Когда переменная равна null

id: 38930_task_3

Теперь переменная `$user_input` явно установлена в `null`. Проанализируйте код и введите в поле, какое значение будет присвоено переменной `$name` и выведено на экран.

Что должно получиться?
$user_input = null;
$name = $user_input ?? 'Anonymous';
echo $name;
Сообщения
Проверить
Показать подсказку

Исправление старого синтаксиса

id: 38930_task_4

Раньше для подобной проверки приходилось использовать тернарный оператор вместе с `isset()`. В этом коде смешались старый и новый подходы. Исправьте строку, чтобы она использовала только современный оператор объединения с `null`.

Найдите ошибку и исправьте
<?php
// $post['title'] не существует
$title = $post['title'] ? : 'Без заголовка';
echo $title;
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Отличие от тернарного оператора: значение 0

id: 38930_task_5

Это ключевое отличие `??` от тернарного оператора `?:`. Значения, которые считаются "ложными" (false, 0, пустая строка ''), но не являются `null`, не заставляют оператор `??` срабатывать. Что выведет этот код?

Выберите правильный вариант ответа
$items_count = 0;
$display_count = $items_count ?? 'N/A';
echo $display_count;
Сообщения
Проверить
Показать подсказку

Замена isset() на ??

id: 38930_task_6

Перед вами классическая проверка существования переменной с помощью `isset()` и тернарного оператора. Соберите в левом поле эквивалентную, но более короткую конструкцию с использованием оператора объединения с `null`.

Перетяните в правильном порядке строки из одного блока в другой
// Старый код:
// $page = isset($_GET['page']) ? $_GET['page'] : 1;
$page = 
$_GET['page']
??
1;
isset()
?
:
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Работа с несуществующим ключом массива

id: 38930_task_7

Одно из самых частых применений `??` — безопасное извлечение данных из массива, когда вы не уверены, существует ли ключ. Что выведет этот код, если в массиве `$user` нет ключа 'lastname'?

Выберите правильный вариант ответа
$user = ['firstname' => 'John'];
$lastName = $user['lastname'] ?? 'Doe';
echo $lastName;
Сообщения
Проверить
Показать подсказку

Цепочка операторов ??

id: 38930_task_8

Операторы `??` можно выстраивать в цепочку для проверки нескольких значений по очереди. Он вернёт первое же существующее и не равное `null` значение. Заполните пропуски, чтобы создать цепочку, которая ищет имя пользователя сначала в `$_POST`, затем в `$_GET`, и только потом использует 'Guest'.

Заполните пропуски
// Предположим, $_POST['name'] и $_GET['name'] не определены
$name = $_POST['name'] input1S $_GET['name'] input2S 'Guest';
echo $name;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру