Php OR运算符给出了错误的结果?

时间:2016-10-05 05:44:40

标签: php

我对OR

php运算符的输出感到惊讶
$a = 5;

echo $b = ((intval($a) == 8 || 2) && intval($a) != 0 ? $a : NULL);

它回显5但我希望NULL

4 个答案:

答案 0 :(得分:5)

应该是这样的。

$a = 5;

echo $b = ((intval($a) == 8 || intval($a) == 2) && intval($a) != 0 ? $a : NULL);

答案 1 :(得分:3)

如你所说,你的$a不是8或2.所以假设它是5。

您的评估如何运作:

((intval($a) == 8 || 2) && intval($a) != 0 ? $a : NULL);

  1. 比较intval($a) == 8
  2. 无论您从#1获得什么,请|| 2导致true(非零数字松散等于true
  3. 比较intval($a) != 0 - 导致为真。
  4. 比较true && true => true
  5. 答案是$a
  6. 步骤一步:

     (intval($a) == 8 || 2) && intval($a) != 0 ? $a : NULL;
     (false || 2) && intval($a) != 0 ? $a : NULL);
     (false || true) && intval($a) != 0 ? $a : NULL;
     true && intval($a) != 0 ? $a : NULL;
     true && true ? $a : NULL;
     $a;
    

    TL; DR

    要获得NULL,请将|| 2更改为|| intval($a) == 2

答案 2 :(得分:2)

更改此

intval($a) == 8 || 2

intval($a) == 8 || intval($a) == 2

echo $b = ((intval($a) == 8 || intval($a) == 2) && intval($a) != 0 ? $a : NULL);

答案 3 :(得分:2)

在PHP中无法编写OR的比较方式。使用以下代码。

echo $b = ((intval($a) == 8 || intval($a) == 2) && intval($a) != 0 ? $a : NULL);