В проектах их часто путают, хотя работают они по разным правилам. Коротко и по делу — что выбирать и когда.
🔸 Тернарный оператор ?:
Проверяет true/false значение.
$displayName = $payload['name'] ?: 'Guest';📌 Возвращает правую часть, если значение:
'', null, false, 0 или другая «ложь».❗️ Но если ключ не существует → получите Undefined array key.
Пример:
$payload['name'] = false; // → 'Guest' $payload['name'] не существует → ошибка🔸 Null coalescing оператор ??
Проверяет существует ли ключ и не
null.$displayName = $payload['name'] ?? 'Guest';📌 Работает безопасно даже если ключ отсутствует.
📌 Возвращает любые значения, в том числе false и пустую строку.
Пример:
$payload['name'] = false; // → false$payload['name'] отсутствует → 'Guest'⚠️ Частая ошибка
?? может спрятать баги.$firstName = $payload['frist_name'] ?? 'Guest';Опечатка → ошибки нет → баг уходит в прод.
?: в такой ситуации бы упал и подсветил проблему.🧭 Что использовать?
Используйте ?:, если:
🔸 значение точно существует
🔸 нужно проверять truthiness
Используйте ??, если:
🔸 ключ может отсутствовать
🔸 важно отличать null от false, 0, ''
🔸 работаете с внешними API / неполными payload'ами
🐸 Библиотека пхпшника
📍 Навигация: Вакансии • Задачи • Вопросы с собеса
#элементарный_выбор