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
.