Wie zum verketten mehrerer ternärer operator in PHP?
Ich benutze ternäre Operatoren eine Menge, aber ich kann nicht scheinen zu stapeln mehrerer ternärer operator Ineinander.
Ich bin mir bewusst, dass das stapeln mehrerer ternärer operator würde machen den code schlechter lesbar aber in einigen Fällen würde ich
wie es zu tun.
Dies ist, was ich bisher ausprobiert habe :
$foo = 1;
$bar = ( $foo == 1 ) ? "1" : ( $foo == 2 ) ? "2" : "other";
echo $bar; //display 2 instead of 1
Was ist die richtige syntax ?
mögliche Duplikate von verschachtelten php ternärer Probleme: ternäre Ausgabe != if - else
Super Antwort, jeder.
Super Antwort, jeder.
InformationsquelleAutor Cybrix | 2011-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Klammern sind, was ich denke, ist immer Sie.
Versuchen
InformationsquelleAutor Brandon Horsley
Das problem ist, dass PHP im Gegensatz zu allen anderen Sprachen, macht der bedingte operator Links-assoziativ. Dieser bricht dein code wäre schon was feines in anderen Sprachen.
Müssen Sie Klammern verwenden:
(Beachten Sie, dass habe ich entfernt, die anderen Klammern aus dem code; aber diese waren richtig, nur redundant.)
InformationsquelleAutor Konrad Rudolph
Müssen Sie ein paar Klammern um die Recht operand:
PHP-interpreter defekt ist, und behandelt Ihre Linie:
als
und da das linke Ausdruck als "true", der erste operand der übrigen ternären operator ("2") zurückgegeben wird, statt.
Das PHP-Handbuch dokumentiert die Umsetzung - sind die Dokumente nicht definieren die Umsetzung, als PHP-hatte nie eine formale Spezifikation. Die Umsetzung ist gebrochen (D. H. verschiedene), wenn im Vergleich zu jeder anderen Sprache, die unterstützt den ternären operator.
Wenn Sie also sagen, es war anders als was Sie gewohnt sind, warum nicht einfach sagen, dass?
Ich sagte genau das, was ich sagen wollte. Jeder vernünftige Sprache "design", gefolgt von dem Präzedenzfall von C, C++, Java, etc.
InformationsquelleAutor Alnitak
Könnten Sie schreiben das richtig so:
(D. H.: Einfach einbetten der 'inneren' ternären operator in der Klammer.)
Trotzdem wäre ich wirklich versucht, dies nicht zu tun, als es ungefähr so lesbar wie eine besonders unleserliche Ding, das ist schon arg verschmiert - es gibt niemals eine Entschuldigung für die Verschleierung von code, und diese Grenzen auf.
InformationsquelleAutor John Parker
Setzen Sie Klammern um jede innere ternärer operator, diesen Weg operator Priorität ist gesorgt:
InformationsquelleAutor faken
Fügen Sie die Klammern:
InformationsquelleAutor Yuri Stuken
Nur stapeln sich die Klammern und du hast es:
Als ein beiseite, du hast noch viele Klauseln, sollten Sie eine
switch
:Wenn der Schalter bekommt lange, Sie können wickeln Sie es in eine Funktion aus.
InformationsquelleAutor csl
Verwenden Sie einfach extra ( ) und es wird funktionieren
InformationsquelleAutor Serg