Geschichte
#Tipps
by chatGPT
*** Kurzfassung
Operator Bedeutung Beispiel
??
Null-Coalescing: nur prüfen, ob eine Variable existiert und nicht null ist
$_GET['a'] ?? 'leer'
?:
Ternary-Short-Syntax: prüft, ob der linke Wert truthy ist
$x ?: 'leer'
Sie verhalten sich komplett unterschiedlich.
*** 1. Der Null-Coalescing-Operator ??
Er prüft nur: existiert die Variable?
ist sie nicht null?
Sonst nimmt er den rechten Wert.
$bereich = $_GET['bereich'] ?? '';
Das bedeutet:
Wenn $_GET['bereich'] existiert -> Wert nehmen
Wenn nicht -> ''
Wichtig:
?? löst keine Warnung aus, wenn die Variable nicht existiert.
Darum nutzt man ihn so gern bei $_GET und $_POST.
*** 2. Der Elvis-Operator ?: (Kurzform vom Ternary-Operator)
Er prüft:
Ist der Wert “truthy”? (also NICHT: false, 0, "", null, [], "0")
Beispiel:
$bereich = $_GET['bereich'] ?: '';
Das bedeutet:
Wenn $_GET['bereich'] existiert UND NICHT leer ist -> Wert nehmen
Sonst -> ''
ABER:
Wenn $_GET['bereich'] gar nicht existiert -> *** FEHLER: Undefined index
Wenn $_GET['bereich'] = "0" -> wird wie leer behandelt
Wenn $_GET['bereich'] = "" -> wird wie leer behandelt
Wenn $_GET['bereich'] = null -> wird wie leer behandelt
Also: viel gefährlicher bei GET/_POST
*** Mini-Vergleich:
Angenommen:
$_GET['bereich'] = "kuchen";
Ausdruck Ergebnis
$_GET['bereich'] ?? 'leer' "kuchen"
$_GET['bereich'] ?: 'leer' "kuchen"
Alles gut.
Angenommen:
$_GET['bereich'] = "";
Ausdruck Ergebnis
$_GET['bereich'] ?? 'leer' ""
$_GET['bereich'] ?: 'leer' "leer" (weil "" ist “falsy”)
Angenommen:
// es gibt keinen ?bereich=...
Ausdruck Ergebnis
$_GET['bereich'] ?? 'leer' "leer" (korrekt – ohne Fehler)
$_GET['bereich'] ?: 'leer' *** FEHLER: Undefined index
*** Merksatz
?? = prüft Existenz -> perfekt für $_GET, $_POST, Arrays
?: = prüft Wahrheitswert -> gut für “wenn leer, dann …”
*** Sehr einfacher Vergleich
Stell dir vor: $user = $_GET['user'];
?? = “wenn nicht vorhanden -> Ersatzwert nehmen”
?: = “wenn leer -> Ersatzwert nehmen”
Beispiel:
$name = $_GET['name'] ?? 'Unbekannt'; // Sicher & korrekt
$name = $_GET['name'] ?: 'Unbekannt'; // Unsicher & andere Logik
*** Fazit
Zweck Bester Operator
GET/POST-Werte sicher abfragen ??
Leere Strings abfangen ?:
Variable existiert sicher beide möglich