Ternary Operator ?: versus Null Coalescing Operator ?? versus Null Coalescing Assignment Operator ??= von Katzen erklärt

10.04.2024

Bild eines schönen aufgeräumten Gartens

Kurz gesagt:

PHP bietet zwei nützliche Operatoren zur Vereinfachung von Bedingungsüberprüfungen: den Ternary Operator (?:) und den Null Coalescing Operator (??).

Beide Operatoren dienen dazu, den Code zu straffen und die Lesbarkeit zu verbessern, aber sie unterscheiden sich in ihrer Funktionsweise und Anwendung.

Der Ternary Operator ist eine Abkürzung für:

if(human_is_asleep()) {
   be_as_loud_as_you_can();
} else {
   sleep();
}Code-Sprache: PHP (php)

Das gleiche mit dem Ternary Operator:

human_is_asleep() ? be_as_loud_as_you_can() : sleep();

Da Ternary Operatoren hauptsächlich dazu da sind, die Lesbarkeit zu erhöhen, sind verschachtelte Ternary Operatoren keine gute Idee, da sie die Lesbarkeit verschlechtern:


$alter = 3; // Alter der Katze in Jahren
$gewicht = 6; // Gewicht der Katze in Kilogramm

// Bestimmung der Futtervorliebe mit einem verschachtelten Ternary Operator
$futterVorliebe = $alter < 2 ? ($gewicht < 3 ? 'Jungtier Nassfutter (sehr teuer)' : 'Jungtier-Trockenfutter' :
                  ($gewicht < 4 ? 'Erwachsenen-Nassfutter' : 'Erwachsenen-Trockenfutter');

echo "Diese Katze bevorzugt $futterVorliebe.";Code-Sprache: PHP (php)

Null Coalescing Operator (??)

Der Null Coalescing Operator („coalescing“ = „verschmelzen“) prüft auf das Vorhandensein eines Wertes und wird mit der Syntax Ausdruck1 ?? Ausdruck2 verwendet. Wenn Ausdruck1 existiert und nicht null ist, wird Ausdruck1 zurückgegeben; andernfalls wird Ausdruck2 ausgewertet und zurückgegeben. Besonders nützlich in folgendem Beispiel:

$katzenDaten = [
    'Maunzi' => ['lieblingsspielzeug' => 'Laserpointer'],
    'Fellkugel' => ['lieblingsspielzeug' => null],
    'Brett Pit' => [],
    'Nukleare Gefahr' => ['lieblingsspielzeug' => 'Liebe'],
];
foreach ($katzenDaten as $name => $daten) {
    $lieblingsspielzeug = $daten['lieblingsspielzeug'] ?? 'Olle Plastikmaus';
    // Das gleiche als Ternary:
    // $lieblingsspielzeug = isset($daten['lieblingsspielzeug']) && $daten['lieblingsspielzeug'] !== null ? $daten['lieblingsspielzeug'] : 'Olle Plastikmaus' 
   // Bei langen Variablennamen sehen Sie deutlich den Vorteil des ?? Operators.
    echo "$name liebt es, mit Spielzeug $lieblingsspielzeug zu spielen.\n";
}Code-Sprache: PHP (php)

Ausgabe:

Maunzi liebt es, mit Spielzeug Laserpointer zu spielen.
Fellkugel liebt es, mit Spielzeug Olle Plastikmaus zu spielen.
Brett Pit liebt es, mit Spielzeug Olle Plastikmaus zu spielen.
Nukleare Gefahr liebt es, mit Spielzeug Liebe zu spielen. 😸

In diesem Fall wurde der Null Coalescing Operator benutzt, um undefinierten Eingaben bei Katzenspielzeugen einen Standard-Wert zuzuweisen.

Bei Null Coalescing Assignment wird gleich eine Zuweisung (Assignment) durchgeführt, es ist eine Abkürzung in der Abkürzung. Besonders nützlich wird er, wenn man verschachtelte Indizierte Arrays normalisieren möchte, zum Beispiel:


// $daten['katzen'][$i]['rasse'] ??= 'Europäisch Kurzhaar'; 
// ist einfacher lesbar und wartbarer als das Äquivalent:
// $daten['katzen'][$i]['rasse'] = $daten['katzen'][$i]['rasse'] ?? 'Europäisch Kurzhaar';
Code-Sprache: JSON / JSON mit Kommentaren (json)

Das war ein kleiner Ausflug in die Welt der Katzen PHP Operatoren. Viel Spaß beim Coden.