2016-10-05 68 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