2016-10-05 64 views
0

我与OR操作符的输出惊讶的phpPHP OR运算符给出错误结果?

$a = 5; 

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

它呼应5,但我希望NULL

+0

你为什么想到NULL? –

+0

因为我的$ a不是2而不是8 – user1234

+2

一位老婆送她的程序员丈夫到店里:“拿一块面包,如果他们有鸡蛋,打一打。”丈夫带着十几块面包回来了。看到妻子生气的脸,他无辜地回应道:“什么?他们有鸡蛋!” - 人类语言和编程语言实际上并不一样。 '$ a == 8 || 2'表示'($ a == 8)|| 2'和'false || 2'是'1'(真理)。 – Amadan

回答

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

步骤一步:

(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

+0

感谢您的回答:) – user1234

+0

感谢您的解释 – Bender

2

改变这种

intval($a) == 8 || 2 

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

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

感谢您的回答:) – user1234

5

它应该是这样的。

$a = 5; 

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

感谢您的回答:) – user1234

2

您在PHP中编写比较OR的方式是不可能的。使用下面的代码。

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

感谢您的回答:) – user1234