代码之家  ›  专栏  ›  技术社区  ›  matt

和或运算符php问题?

  •  0
  • matt  · 技术社区  · 14 年前

    嘿伙计们, 我很困惑:

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

    我在一个函数中有一个forceAnim参数,可以是0或1。 is_singular表示显示特定类型的页面,$iphone表示在iphone上查看。

    如果在iphone上看到forceAnmi,我希望它始终为0;另外,如果i s_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
    

    两个变量都返回1,但前提是它们是真的。所以如果我在iphone上$iphone返回1,但如果我不在iphone上$iphone不返回任何thin(不是0) 同样适用于is_singular()!

    4 回复  |  直到 14 年前
        1
  •  0
  •   Crozin    14 年前

    只需替换两个操作数: ($iphone || is_sungular()) ? 0 : 1 .

    OR 如果第一个操作数为真,则运算符不执行第二个操作数。意思是,如果 $iphone 那是真的 is_singular() 甚至不会被处决。

        2
  •  1
  •   David Kuridža    14 年前

    正如其他人指出的,一定要检查返回的是什么 is_singular() 它的价值是什么 $iphone . 可能价值观并不是你所期望的那样。

    另一方面,用类似于

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

        3
  •  0
  •   Marc B    14 年前

    尝试将整个三元语句放在括号中。PHP的运算符优先规则将导致echo回显语句if()部分的结果,而不是if()的结果:

    forceAnim: <?php echo ((is_singular() || $iphone) ? 0 : 1); ?>
                          ^-add this                         ^-and this
    
        4
  •  0
  •   Laph    14 年前

    语法正确。您应该检查“is_singular”的返回值和$iphone中的值,因为这两个值看起来都是“evaluate”(!)到(布尔值)false。由于PHP是一种松散类型的语言,并且您在布尔上下文(the | | |)中使用这些变量,因此它们被静默地转换为bool,并且两者都被转换为false,从而导致表达式的结果是(int)1,而表达式又被静默地转换为(string)1,因为“echo”是一个字符串上下文。