Trinitäts-Operator

Aus php bar
Wechseln zu: Navigation, Suche

Der Trinitäts-Operator (engl. Ternary-Operator), ist ein Ausdruck, der eine Fallunterscheidung beinhaltet. Dies stellt eine besonders verkürzte Kombination aus Zuweisung und Abfrage dar.

Kurz:

1 $foo = $aussage ? $wennWahr : $wennFalsch;


Wenn $aussage WAHR ist, dann wird $wennWahr zurückgegeben, ansonsten wird $wennFalsch zurückgegeben. Auf diese Weise lassen sich Ausgaben und Zuweisungen, die zwischen zwei einzelnen (nicht mehr) Argumenten variieren, in Kurzform darstellen.

Der Trinitäts-Operator ist eine Kurschreibweise für folgende Konstruktion.

1 // Trinität
2 $foo = $aussage ? $wennWahr : $wennFalsch;
3 // Ausgeschriebene Form
4 if ($aussage) {
5     $foo = $wennWahr;
6 } else {
7     $foo = $wennFalsch;
8 }


Beispiel:

 // normal
 if (true == $success) {
     echo '+';
 } else {
     echo '-';
 }
 
 // kurz
 if (true == $success) echo '+'; else echo '-';
10 
11 // noch kuerzer
12 echo $success ? '+' : '-';


Folgendes ist auch möglich:

 // if-Methode
 if ($success) {
     func1('w00t');
 } else {
     func2('d00d');
 }
 
 // kurz, da nur ein Befehl pro Zweig ausgefuehrt wird, kann man die geschweiften Klammer weglassen
 if ($success) some_function('w00t'); else other_function('d00d');
10 
11 // noch kürzer
12 $success ? func1('w00t') : func2('d00d');


Shortcut (ab PHP 5.3)

Ab PHP 5.3 gibt es auch eine Kurzform des ?:-Operators:

1 echo $a ?: $b;


In dieser Form wird $a ausgewertet. Wenn $a einen wahren Wert ergibt wird $a zurück gegeben, ansonsten $b. Eine identische Langform wäre

1 echo $a ? $a : $b;


Dabei ist zu beachten, dass die Prüfung des ersten Operanden nicht der durch isset()/empty() entspricht sondern eines normalen bool'schen Vergleiches. Folgender Code führt daher zu einem E_STRICT Fehler, wenn die Variable nicht gesetz wurde:

1 echo $_GET['id'] ?: 0;


Wenn die Fehlermeldung mit dem @-Operator unterdrückt wird kann dieser Shortcut genutzt werden um dieExistenz von Request-Variablen zu prüfen und andernfalls auf default-Werte zurück zu fallen.

siehe auch

Links