Ehrfurchtgebietend ist sein Titel, praktisch und einfach ist er dennoch: Eine meiner liebsten Abkürzungen bei PHP ist der ternäre Operator. Das ist eigentlich nur eine veränderte Schreibweise der IF-Bedingung für einfache Fälle. So spart man sich eine Menge Zeilen und bleibt dennoch verständlich oder wird sogar in seinem Code verständlicher.
Ein einfaches Beispiel wäre
($a == 1) ? echo "a ist 1" : echo "a ist nicht eins";
Damit wird die jeweilige Ausgabe nach dem Fragezeichen oder dem Doppelpunkt dargestellt.
Der ternäre Operator heißt „ternär“ weil gleich drei Argumente fällig sind: Eine Bedingung, eine Anweisung, wenn die Bedingung erfüllt wird, und eine Anweisung, wenn die Bedingung nicht erfüllt wird.
Zuweisung
Alternativ kann man auch die Anweisung als Zuweisung nutzen, dann verknüpft man die Anweisung vor dem Ternären Operator einfach mit dem Ergebnis des Operators. Für unser erstes Beispiel kann man nämlich auch schreiben:
echo ($a==1) ? "a ist 1" : "a ist nicht eins";
Ebenso kann man Werte zuweisen:
$b = ($a == 1) ? 1 : 0
Wenn $ a also gleich 1 ist, dann wird $b auch mit 1 belegt, sonst ist $b gleich 0.
Verschachtelung
Wer es etwas ausgefallener mag, kann ternäre Operatoren auch miteinander verschachteln:
echo ($a > $b) ? "Fizz" : ((a < b) ? "Buzz" : "FizzBuzz");
Ist hier $a größer als $b, dnn wird Fizz ausgegeben. Ansonsten wird in den nächsten ternären Operator gesprungen und geprüft, ob $a kleiner als $b ist, wenn ja, dann wird Buzz ausgegeben, sollte aber auch das nicht der Fall sein, dann wird FizzBuzz ausgegeben, und man kann davon ausgehen, dass beide Variablen mit dem gleichen Wert belegt sind. Im Endeffekt ist das auch nichts anderes als eine IF – ELSEIF – ELSE Konstruktion. Der Übersichtlichkeit halber würd es sich hier aber auch langsam wieder anbieten, eine normale IF-Anweisung zu nutzen.
Vorsicht ist aber geboten, wenn man die Operatoren aneinanderreiht. Denn dann wird es schnell schwerverständlich, wenn es auch stringent und logisch bleibt. Folgender Ausdruck beispielsweise dürfte erst einmal in seinem Ergebnis überraschen:
echo true ? „true“ : false ? „oh“ : „je“;
Spoiler: Das Ergebnis ist „oh“. Die Aneinanderreihung dieser Operatoren bewirkt, dass sie von links nach rechts ausgewertet werden. Der erste Ausdruck ist true und würde „true“ ausgeben, dieses wir aber nach dem zweiten Fragezeichen wiederum zum boolschen true ausgewertet und führt dann zur Ausgabe von „oh“.
Abkürzung
Es ist auch möglich den mittleren Teil aus dem Ternären Operator wegzulassen:
True ? : echo "banana"
Dabei wird der erste Ausdruck zurückgegeben, wenn er zutrifft, oder eben der dritte Ausdruck, wenn nicht. Das wäre gleichbedeutend mit
True ? True : echo "banana"
Nun denn, so gibt es jetzt neues Handwerkszeug in den Händen mit denen das Programmieren sogar noch ein bisschen mehr Spaß macht. Viel Erfolg damit!