Despre operatorul ternar am mai discutat şi în alt articol. Despre operatorul de coalescență nulă (??), însă, încă nu am făcut-o. Şi, pentru că, oarecum, seamănă (şi nu prea) le vom compara și analiza în acest articol.
Operatorul ternar (?:)
Operatorul ternar este o formă scurtă pentru if ... else, fiind folosită când dorim alegerea între două valori în funcție de o condiție.
|
1 2 3 4 5 |
if (condiţie) { declaratie1; } else { declaratie2; } |
Forma standard este:
(condiție) ? declaratie1 : declaratie2;. Aşadar, dacă condiţia este adevărată va fi afişată declaratie1, iar dacă este fals, va fi afişată declaratie2.
Exemplu:
echo $afis == 1 ? $user_id : NULL;
- Verifică dacă
$afis == 1. - Dacă DA → returnează
$user_id. - Dacă NU → returnează
NULL.
Operatorul de coalescență nulă (??)
Operatorul de coalescenţă este forma scurtă a unei astfel de situaţie:
|
1 2 3 4 5 |
if (isset(variabila)) { variabila; } else { valoare_implicita; } |
Forma standard este:
$variabila = $valoare1 ?? $valoare_implicita. Aşadar, dacă $valoare1 este setată (există) și nu este null returnează $valoare1, iar dacă nu returnează $valoare_implicita.
Exemplu:
echo $_SESSION['solicitare'] ?? [];
- Verifică dacă
$_SESSION['solicitare']există şi nu e null. - Dacă DA → returnează
$data = $_SESSION['solicitare']. - Dacă NU → returnează
$data = [].
Exemplu grafic

Transpunerea celor două scheme poate fi redată aşa:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php // // --- Operator ternar --- // $x = 7; // atribuim 7 variabilei $x $rezultat = ($x > 5) ? 'valoare1' : 'valoare2'; echo $rezultat; // va afișa "valoare1" pentru că 7 > 5 // // --- Operator coalescență nulă --- // $var = null; // pentru a simula "nu există" putem elimina această linie $rezultat = $var ?? 'valoare_implicita'; echo $rezultat; // va afișa "valoare_implicita" pentru că $var este null ?> |
Simplificare ChatGPT-istă
Folosind ajutorul ChatGPT, sintetizând, ar rezulta aceste diferenţe redate în tabelul următor.
| Caracteristică | Ternar (?:) |
Coalescență nulă (??) |
|---|---|---|
| Scop | Alege între două valori în funcție de o condiție | Alege valoarea non-null/existentă |
| Verifică | Orice condiție logică (expresie booleană) | Doar dacă e isset() și nu e null (adică != null) |
| Exemplu | $x > 5 ? 'mare' : 'mic'; |
$x ?? 'valoare implicită'; |
| Echivalent lung | if (...) { ... } else { ... } |
if (isset(...)) { ... } else { ... } |
| Număr valori verificate | Două (adevărat/fals) | Poate fi și un şir ($a ?? $b ?? $c) |
| Rezultate posibile | Două valori la alegere | Prima valoare non-null din şir |
| Utilizare tipică | Alegere în funcţie de o condiţie | Dăm valoare implicită dacă e null. |
Aşadar, simplificând:
-
- dacă avem o condiție logică și două posibile rezultate → folosim operatorul ternar.
- dacă vrem să verificăm dacă o variabilă există și nu e nulă, și altfel să dăm o valoare implicită vom folosi
??.
Truc mnemotehnic:
- Ternar = „T” de la Test logic → testează o condiție.
??= „Două semne de întrebare” → întreabă dacă variabila există și nu e null.</li>
Exemplificare pentru diferenţiere
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php // Exemplu 1: Operator TERNAR $afis = 1; $user_id = 123; $rezTernar1 = $afis == 1 ? $user_id : NULL; $rezTernar2 = $afis == 0 ? $user_id : NULL; echo "=== Operator Ternar ===\n"; echo "Caz 1 (afis=1) → " . var_export($rezTernar1, true) . "\n"; // 123 echo "Caz 2 (afis=0) → " . var_export($rezTernar2, true) . "\n"; // NULL // Exemplu 2: Operator COALESCENȚĂ NULĂ (??) $_SESSION = []; // simulăm o sesiune goală $data1 = $_SESSION['solicitare'] ?? []; // nu există → [] $_SESSION['solicitare'] = ['id' => 45]; $data2 = $_SESSION['solicitare'] ?? []; // există → array echo "\n=== Operator ?? ===\n"; echo "Caz 1 (nu există 'solicitare') → " . var_export($data1, true) . "\n"; echo "Caz 2 (există 'solicitare') → " . var_export($data2, true) . "\n"; // BONUS: Şir cu ?? (prima valoare non-null) $valoare = null; $rez = $valoare ?? 'implicită'; echo "\nŞir simplu (null → implicită) → " . $rez . "\n"; $valoare = 'setată'; $rez = $valoare ?? 'implicită'; echo "Şir simplu (setată) → " . $rez . "\n"; |
Afişare:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
=== Operator Ternar === Caz 1 (afis=1) → 123 Caz 2 (afis=0) → NULL === Operator ?? === Caz 1 (nu există 'solicitare') → array ( ) Caz 2 (există 'solicitare') → array ( 'id' => 45, ) Şir simplu (null → implicită) → implicită Şir simplu (setată) → setată |
Aşadar:
- Ternarul decide în funcție de o condiție logică (adevărat/fals).
??dă o valoare implicită dacă prima nu există sau enull.- Putem folosi
??și în şir:$a ?? $b ?? $c.
