Elvis vs Null Coalescing: Das Geheimnis für sauberen PHP-Code

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Elvis vs Null Coalescing: Wo liegt der Haken? (Ein Blick unter die Haube von PHP)

\n\n

Hallo, Kollege! Wenn du schon einmal in PHP programmiert hast, kennst du sicher die Situation: Du musst prüfen, ob eine Variable existiert, und wenn ja, ihren Wert verwenden – andernfalls einen Standardwert einsetzen. Klingt einfach, aber genau hier stolpern Anfänger (und nicht nur sie) über zwei sehr ähnliche, aber grundlegend unterschiedliche Operatoren: den short-ternary (Elvis-Operator) ?: und den null coalescing operator ??.

\n\n

Das ist eine der häufigsten Fragen auf Stack Overflow (tausende Aufrufe und Stimmen). Und das zu Recht: Der Unterschied ist nicht nur akademisch. Die falsche Wahl des Operators kann zu Bugs führen, die du stundenlang jagst. Lass uns ein für alle Mal klären, was unter der Haube steckt und wann du welchen Operator verwendest.

\n\n

Kurze Einführung: Warum brauchen wir diese Operatoren überhaupt?

\n\n

Stell dir vor, du schreibst Code, um den Namen eines Benutzers anzuzeigen. Wenn kein Name vorhanden ist, zeigst du „Gast“ an. Die klassische Methode ist if:

\n\n
if (isset($userName)) {\n    $displayName = $userName;\n} else {\n    $displayName = 'Gast';\n}
\n\n

Funktioniert, ist aber umständlich. PHP bietet elegante Abkürzungen. Und hier kommen wir zum Kern der Frage: ?: oder ??? Auf den ersten Blick dasselbe. Aber das täuscht.

\n\n

1. Elvis-Operator (?:) – „König der booleschen Werte“

\n\n

Der Elvis-Operator (so genannt wegen seiner Ähnlichkeit mit der Frisur des Rock-'n'-Roll-Königs: ?: – Augen, Nase und Tolle) wurde bereits in PHP 5.3 eingeführt. Er ist eine Kurzform des ternären Operators.

\n\n

Syntax:

\n
$result = $expression ?: $default;
\n\n

Was bedeutet das? Der Interpreter prüft $expression. Wenn es zu true ausgewertet wird (also kein „falscher“ Wert ist), wird $expression zurückgegeben. Wenn $expression ein „falscher“ Wert ist (false, 0, leerer String, null, leeres Array usw.), wird $default zurückgegeben.

\n\n

Wichtiger Hinweis: Der Elvis-Operator prüft nicht, ob eine Variable existiert. Er prüft ihren Wahrheitsgehalt. Wenn die Variable nicht definiert ist, erhältst du einen Notice: Undefined index/variable.

\n\n

Beispiel mit Fallstrick:

\n
$count = 0;\n$result = $count ?: 10;\necho $result; // Gibt 10 aus, nicht 0!
\n\n

Warum? Weil 0 ein „falscher“ Wert (falsy) ist. Elvis denkt, die Variable sei „leer“, und gibt den Ersatzwert zurück. Das überrascht viele.

\n\n

2. Null Coalescing Operator (??) – „Retter vor Notices“

\n\n

Der null coalescing operator wurde mit PHP 7.0 eingeführt und mit Begeisterung aufgenommen. Seine Superkraft: Er arbeitet sicher mit nicht existierenden Variablen, ohne Fehler auszulösen.

\n\n

Syntax:

\n
$result = $expression ?? $default;
\n\n

Was bedeutet das? Der Operator prüft, ob $expression existiert und nicht null ist. Wenn ja – gibt er $expression zurück. Andernfalls $default.

\n\n

Der entscheidende Unterschied: ?? ignoriert alle „falschen“ Werte außer null und Undefiniertheit. 0, "", false – all das gilt als gültig und wird zurückgegeben.

\n\n

Beispiel:

\n
$count = 0;\n$result = $count ?? 10;\necho $result; // Gibt 0 aus! Weil die Variable existiert und nicht null ist.
\n\n

Siehst du den Unterschied? Das ist der entscheidende Mechanismus unter der Haube.

\n\n

3. Vergleich unter der Haube: Wahrheitstabelle

\n\n

Fassen wir alles in einer übersichtlichen Tabelle zusammen, um es zu verinnerlichen. Nehmen wir an,

Blogs

Buchempfehlungen