2012-04-22 4 views
5

Ok, also habe ich gerade etwas seltsames Verhalten mit PHP realisiert und würde gerne wissen, warum das passiert. So läuft diesen Code:PHP ternäre Anweisung mit 'und'

var_dump(true and false ? 'one' : 'two'); 

Ausgänge

boolean true 

anstelle von 'zwei', wie man erwarten würde ... Das Problem scheint zu sein mit 'und'.

Running:

var_dump(true && false ? 'one' : 'two'); 

Ausgänge

string 'two' (length=3) 

wie erwartet. Warum verursacht die Verwendung von 'und' anstelle von '& &' dieses seltsame Verhalten? Sollen sie nicht gleich sein?

+0

Ich würde gerne die Antwort darauf wissen. Meine Vermutung ist die Reihenfolge .. In der ersten, wird falsch für den ternären Operator verwendet, der zu wahr und 'zwei', die als wahr auswertet ... – DanRedux

+0

Sieht aus wie ich Recht hatte. : P – DanRedux

Antwort

5

Das liegt daran, ?: hat höhere precedence als and, aber niedriger als &&.

+0

Wow, das ist nur dumm. Gibt es einen logischen Grund? Und? Und? &&? Haben nicht die gleiche Präzedenz? – dtbarne

+0

Nun, das macht keinen Sinn warum sie das gemacht haben ... jetzt erkenne ich, dass ich $ eins und $ zwei || verwende Beispielsweise ist $ 3 nicht dasselbe wie $ one && $ two || drei Dollar. Danke dafür. – Zaptree

+1

@dtbarne @Zaptree: Es gibt tatsächlich einen ziemlich einfachen Grund für zwei verschiedene boolesche und logische Operatoren mit unterschiedlichen Präzedenzfällen. '||' und '&&' werden verwendet, um boolesche Ausdrücke zu verketten und zu alternieren, während 'or' und' and' verwendet werden wie '$ result = mysql_query (...) oder die (mysql_error());' (was ist offensichtlich schlechter Code), dh sie sind mehr alternierende oder verkettende Logik. – NikiC

3

Es ist, weil and niedrigere Priorität als && und ?: haben.

+0

danke für die Antwort, Sie waren 1 Sekunde später als Radu: P – Zaptree