Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим оператор ?? відрізняється від ?:?

  • $a ?? $b (null coalescing) - повертає $a, якщо воно існує і не null, інакше $b. Не кидає попереджень на неіснуючих змінних і ключах.
  • $a ?: $b (скорочений тернарний, «elvis») - повертає $a, якщо воно істинне, інакше $b. Для 0, '', '0', [], false теж поверне $b.
$page = $_GET['page'] ?? 1;      // ключа немає - 1, без попередження
$page = $_GET['page'] ?: 1;      // ключа немає - попередження "Undefined array key"

$discount = 0;
$discount ?? 10;    // 0  - нуль не null
$discount ?: 10;    // 10 - нуль хибний

$title = '';
$title ?? 'Без назви';   // ''
$title ?: 'Без назви';   // 'Без назви'

Як обирати:

  • ?? - «значення за замовчуванням, якщо нічого немає»: ключі масиву, необов'язкові параметри, конфігурація. Найчастіший випадок.
  • ?: - коли порожній рядок, нуль чи порожній масив справді треба замінити: показати «Без назви» замість порожнього заголовка.

Присвоєння з ??= (PHP 7.4):

$options['timeout'] ??= 30;   // присвоїти, лише якщо ключа немає чи там null

Ланцюжки: $a ?? $b ?? $c - перше значення, що не null. Разом із nullsafe-оператором: $user?->profile?->city ?? 'Невідомо'.

Докладніше в документації: Оператор null coalescing

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання