2010-11-25 13 views
0

Hey Jungs, ich bin verwirrt mit diesem:und oder Operator-PHP-Frage?

forceAnim: <?php echo (is_singular() || $iphone) ? 0 : 1; ?> 

ich habe diese forceAnim Parameter in einer Funktion, die entweder 0 oder 1 is_singular sein könnte bedeutet, dass eine bestimmte Art von Seite $ Mittel iphone gezeigt Es ist auf dem iPhone angezeigt.

Ich möchte forceAnmi IMMER 0 sein, wenn es auf dem iPhone angezeigt wird und zusätzlich möchte ich forceAnim 0 sein, wenn is_singular True zurückgibt.

Was ist der Trick? zur Zeit, wenn eine singuläre Seite auf dem iPhone betrachtet ist forceAnim 1.

Grüße

bearbeiten matt:

echo $iphone; //returns 1 only if on iphone 
echo is_singular(); //returns 1 only if i'm on a singular page 

beiden Vars 1 zurück, aber nur, wenn sie wahr sind. also, wenn ich auf dem iphone bin $ iphone gibt 1 zurück, aber wenn ich nicht auf dem iphone bin $ iphone gibt anything nicht zurück (nicht 0) das gleiche gilt für is_singular()!

+0

dass Code sieht richtig, Sie sicher, dass Ihr $ iphone Code richtig ist? – sjobe

Antwort

0

Ersetzen Sie einfach beide Operanden: ($iphone || is_sungular()) ? 0 : 1.

OR Der Operator führt keinen zweiten Operanden aus, wenn der erste wahr ist. Das heißt, wenn $iphone wahr ist, wird is_singular() nicht einmal ausgeführt.

+1

Dies ist keine Lösung, macht es nur etwas schneller .. –

+0

Es wird '0 'zurückgeben, wenn jemand vom iPhone besucht, und wenn nicht, wird das Ergebnis von' is_singular' bestimmen, welcher Wert angezeigt werden soll. Es scheint mir, dass es das ist, was OP wollte ... – Crozin

+0

Aber 'is_singular' sollte eine idempotente Funktion ohne Nebenwirkung sein. Es spielt also keine Rolle, an welcher Position es in einem OR-Ausdruck steht. – Gumbo

0

Versuchen Sie, die gesamte ternäre Anweisung in Klammern zu setzen. PHP-Operator Vorrang Regeln führt dazu, dass das Echo Echo aus, die Ergebnisse der if() Teil der Aussage, anstatt die Ergebnisse der if():

forceAnim: <?php echo ((is_singular() || $iphone) ? 0 : 1); ?> 
         ^-add this       ^-and this 
+0

() = Klammern, Klammern = [] – GreenMatt

+0

Der Ausdruck in Klammern ist nicht notwendig: 'a == (a) == ((a)) == (((a))) == ...'. – Gumbo

0

Die Syntax ist korrekt. Sie sollten den Rückgabewert von "is_singular" und den Wert in $ iphone überprüfen, da beide "auszuwerten" scheinen (!) Zu (boolean) false. Da PHP eine lose typisierte Sprache ist und Sie diese Variablen in einem booleschen Kontext (dem ||) verwenden, werden sie automatisch in bool konvertiert - und beide werden in false konvertiert, was zu einem (int) 1 als Ergebnis Ihres Ausdrucks führt - was wird wieder automatisch in (string) 1 konvertiert, da "echo" ein Zeichenfolgenkontext ist.

1

Wie andere darauf hingewiesen haben, überprüfen Sie, was für is_singular() zurückgegeben wird und was der Wert $iphone ist. Es könnte sein, dass die Werte nicht das sind, was Sie von ihnen erwarten.

Auf einer Seite zur Kenntnis, was es mit so etwas wie

„Vereinfachung“

forceAnim: <?php echo (int)(is_singular() || $iphone); ?>