Что выведет код Middle Типы и строгая типизация обновлено

Операторы ??, ?: и ?->

Вопрос

Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.

<?php
$a = ['x' => 0, 'y' => null];
echo $a['x'] ?? 'def', "\n";
echo $a['x'] ?: 'def', "\n";
echo $a['y'] ?? 'def', "\n";
echo $a['z'] ?? 'def', "\n";
$user = null;
var_dump($user?->profile?->name);

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 0, def, def, def, NULL. ?? подставляет значение только для несуществующего ключа или null: для 0 вернёт 0. ?: срабатывает на любое ложное значение, поэтому def.

Что выведет

0
def
def
def
NULL

Разбор

?? подставляет значение только для несуществующего ключа или null: для 0 вернёт 0. ?: срабатывает на любое ложное значение, поэтому def. Для null и отсутствующего ключа ?? даёт def без предупреждений. Nullsafe ?-> (PHP 8.0) обрывает цепочку на null: NULL.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.