Der Code wird von vorne nach hinten ausgeführt. Also zuerst
<?php
($var > 2) ? "gr than 2" : ($var > 6)
?>
in "gr than 2"
führen.
Dann wird das nächste Fragezeichen gr than 6
ergeben, weil gleich true
ist.
Auch wegen der oben genannten wäre es gut zu bemerken, dass > 6
und > 2
beide greater than 2
sind, so dass die ganze Linie eigentlich ziemlich sinnlos ist, wie es geschrieben wird.
<?php
$var = 4;
echo $current = ($var < 2 ? "not gr than 2 or 6" : ($var > 6 ? "gr than 6" : "gr than 2"));
?>
* Edit:: *
Vielen Dank für die upvotes
Die Lösung wäre so etwas wie sein. Wenn ich das nochmal ansehe, bin ich in meinem eigenen Post verloren gegangen, weil die Logik so komplex ist. Also für andere Lektüre dieses:
Die Logik der OP geschrieben kann auf folgende Werte vereinfacht werden:
<?php
echo true ? "first" : false ? "second" : "third";
Die OP würde erwarten, dass dies in first
führen. Es führt jedoch zu second
, weil zuerst der erste Teil ausgeführt wird, und da dieser Teil true
ist, ist das Ergebnis "zweite".
Verwendung Klammern oder benutze if-then-else – Edwin
'echo $ current = ($ var> 2)? (($ var> 6)?"gr als 6": "gr als 2"): "nicht gr größer als 2 oder 6"; ' – kRicha
Mit ternären Operatoren wie diesem würde ich nicht empfehlen, es wird sehr schnell schwierig, die Logik zu erkennen und daher zu debuggen Anstatt ternäre Operatoren wie diesen zu verwenden, sollten Sie in Erwägung ziehen, zu einem einfachen 'if/if else/else' zurück zu wechseln. – Epodax