Drei Katzen als Illustrationen sinnieren über Ternary Operaror vs Null Coalescing Operator

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

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.

Siehe auch

Weitere Techdoks und Snippets

Shortcode E-Mail Obfuscator

Folgendes Shortcode-Snippet ist nützlich, um E-Mails zu verschleiern, um sie vor SPAM zu schützen. Dazu der Hinweis, dass diese Methode nur funktioniert, wenn Javascript aktiviert ist. Darüber hinaus gibt es keinen 100%igen Schutz vor Bots,…

Elementor Beiträge Widget mit ACF Beziehungsfeld füllen

Mit dem Beiträge Widget in Elementor kann man schon recht bequem in einer Schleife andere Beiträge, Seiten, Produkte oder Custom Post Types (CPT) ( = Benutzerdefinierte Inhaltstypen) auf einer Seite darstellen. Knifflig wird es dann…

PHPStorm: Local Changelist in Git Tool verschwunden

Problem: Local Change List unter PHPStorm fehlt im Git Tool Lösung: Ich hatte ab und zu das Phänomen, dass die Local Changelist (die Dateien in meiner Versionskontrolle) im Git Tool als Tabreiter nicht sichtbar waren.…

Variable in Blade Komponente nicht verfügbar

Problem: Die Parameterübergabe eines Blade-Attributes funktioniert nicht, die Variable in der Komponente ist leer. Es gibt keine Fehlermeldung, sondern die Variable scheint nicht übergeben worden zu sein. Lösung: Eventuell liegt der Fehler in der Benutzung…

Tailwind Autocomplete mit PHPStorm (WebStorm) funktioniert nicht

Problem: Falls Sie z.B. eine Laravel App erstellen und sich darüber wundern, warum PHPStorm oder WebStorm die Autovervollständigung für Ihre CSS Klassen in Blade Templates oder HTML-Dateien nicht durchführt, liegt es höchstwahrscheinlich daran, dass die…

WP CLI Error: Error establishing a database connection.

Auftauchen: Befehle über WP CLI absetzen, Wordpress im Browser funktioniert jedoch. Dieser Fehler tritt häufig auf, wenn der WP CL Interpreter die Datenbankverbindung in wp-config.php nicht richtig interpretieren kann. Lösung: In 99% aller Fälle den…

Mit Alfred sehr schnell Px in REM / EM umrechnen

Auf dem Mac gibt es einen wunderbaren Alfred-Workflow, der Px in Rem umrechnet: Download Direktlink: https://raw.githubusercontent.com/vitorgalvao/requested-alfred-workflows/master/Workflows/Px%20Rem%20Em.alfredworkflow Einfach installieren, dann CMD-Space: Alfred Bar "pxrem" tippen und die Zahl in Pixel angeben. Die Umrechnung in REM wird…

Einrichten von XDebug mit PHPStorm und Valet Development Umgebung

Vorbereitung: Homebrew sollte installiert sein Valet sollte installiert sein und laufen: https://laravel.com/docs/7.x/valet Browser Extension für PHPSTORM sollte installiert sein: https://www.jetbrains.com/help/phpstorm/browser-debugging-extensions.html gerry@webgarten ~ % brew install pecl gerry@webgarten ~ % pecl install xdebug Bei Fehlermeldung: Warning:…