2010-11-25 6 views
0

ちょっとみんな、 私はこれで混乱している: と演算子のPHP質問ですか?

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

私持っている可能性がある機能で、このforceAnimパラメータ0または1 is_singularは、ページの特定のタイプは$ iphone手段を示していることを意味それはiPhoneで見た。

iphoneで表示されている場合はforceAnmiを常に0にしてください。さらに、is_singularがtrueを返す場合はforceAnimを0にします。

何がトリックですか?現在、単数ページはiphone forceAnim上で表示されている場合1.

に関しては

編集マットされています

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

両方VARSは1を返しますが、彼らは真であるだけであれば。だから私はiphoneの上にいる$ iphoneが1を返しますが、もし私がiphoneでないなら、iphoneはanythin(0ではない)を返しません。 is_singular()に同じことが当てはまります!

+0

ようなもので、それを「簡素化」についてはどうですか? – sjobe

答えて

0

ただ、両方のオペランド置き換える:($iphone || is_sungular()) ? 0 : 1を。

ORオペレータは、最初のオペランドがtrueの場合は第2オペランドを実行しません。つまり、$iphoneが真の場合、is_singular()は実行されません。

+1

これは解決法ではなく、わずかに速くなります。 –

+0

誰かがiPhoneから訪問している場合は '0'を返し、そうでない場合は' is_singular'の結果が表示する値を決定します。それは私にはOPが望んでいるようだ... – Crozin

+0

しかし、 'is_singular'は副作用のない冪等の関数でなければなりません。したがって、OR式にどの位置に置かれるかは重要ではありません。 – Gumbo

0

大文字と小文字を区別しないようにしてください。 PHPの演算子の優先順位のルールではなく、IF()の結果よりも、エコーは声明の場合は()の部分の結果をエコーするようになります:

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

()=かっこ、角かっこ= [] – GreenMatt

+0

式をカッコで囲む必要はありません: 'a ==(a)==((a))==((a)))== ...' – Gumbo

0

構文は正しいです。両方とも "評価する"(!)〜(真偽)falseのように見えるので、 "is_singular"の戻り値と$ iphoneの値をチェックする必要があります。 PHPは緩やかに型付けされた言語であり、これらの変数をブール値のコンテキスト(||)で使用しているため、静的にboolに変換され、両方ともfalseに変換され、式の結果として(int) "echo"は文字列コンテキストなので、再び静かに(string)1に変換されます。

1

他の人が指摘したように、is_singular()の返品内容と、$iphoneの値は何かを確認してください。あなたが期待している価値ではないかもしれません。

サイドノートでは、どのようなコードが$ iphoneコードが正しいことをご確認、右に見えること

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