Frage zu Php was bedeutet dieses Fragezeichen (Siehe Bild)?
Was macht das?
danke im voraus
![php - (programmieren, PHP)](https://images.gutefrage.net/media/fragen/bilder/frage-zu-php-was-bedeutet-dieses-fragezeichen-siehe-bild/0_big.jpg?v=1510371054000)
4 Antworten
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Der ternäre Operator ist eigentlich zur Auswertung eines boolschen Ausdrucks gedacht. Je nachdem, ob dieser wahr (?) oder falsch (:) ist, kann ein entsprechender Wert zurückgegeben werden.
Bsp.:
$gerade = $zahl % 2 == 0 ? "gerade" : "ungerade";
Der mittlere Teil kann dabei auch weggelassen werden, dann ist der Rückgabewert entweder das Ergebnis des Ausdrucks oder der optionale Ausdruck.
In diesem Fall würde das Ergebnis also entweder 1 sein oder ungerade.
$gerade = $zahl % 2 == 0 ?: "ungerade";
Beachte aber, einen IF-Ersatz stellt dieser Operator nicht dar, dafür ist der Ausdruck nicht gedacht.
$zahl == 5 ? echo "wahr" : echo "falsch"; // falsch!
Auch, wenn in PHP so etwas funktionieren mag...
function a(){ echo "a"; }
function b(){ echo "b"; }
true ? a() : b();
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
Diese Notation ist die Kurzschreibweise von IF Verzweigung
IF dies THEN das ELSE was anderes
dies ? das : was anderes
also vor dem Fragezeichen kommt der boolische ausdruck
danach das was bei wahr passiert
und nach dem doppelpunkt dann das was bei falsch passiert.
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
![](https://images.gutefrage.net/media/default/user/10_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
(3+4 == 7 ) ? echo "richtig" : echo "falsch"
ich hab mal den syntax ausser acht gelassen
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Der ternäre Operator ist kein Ersatz für IF-ELSE. Dein Beispiel ist ein mustergültiges Beispiel, welches eine Runtime Exception auslösen würde.
So wäre es hingegen richtig:
echo (3 + 4 == 7 ) ? "richtig" : "falsch";
![](https://images.gutefrage.net/media/user/fluffiknuffi2/1650404782403_nmmslarge__0_0_200_200_206c5dc1b471eb79da3f219b3ef382b3.png?v=1650404782000)
Richtig, es ist ähnlich zu if-else aber es gibnt schon wichtige Unterschiede.
![](https://images.gutefrage.net/media/default/user/5_nmmslarge.png?v=1438863662000)
Bedingter Ausdruck bzw. Auswahloperator (ternary conditional).
Die Form ist dabei:
Audruck ? zutreffend : nichtzutreffend
Existiert in diversen Programmiersprachen, ist zwar praktisch, aber fördert nicht unbedingt die Lesbarkeit und Ausdrucksstärke. (Sonderfälle mal ausgenommen)
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Das ist ein ternärer operator. Im prinzip wie ne if abfrage das ganze da
Also wenn die Bedingung vor dem Fragezeichen erfüllt ist, dann passiert das und das?