2014-02-13 137 views
-3

下面是例子:
如果我寫這樣的:如果與其他運營商三元

<?php 
$var = 'A'; 
echo ($var == 'B' || $var == 'C') ? 'B or C' : 'A'; 
?> 

//輸出將是 「A」 但如果我寫的象下面這樣:

<?php 
$var = 'A'; 
echo ($var == ('B' || 'C')) ? 'B or C' : 'A'; 
?> 

它給我出了「B或C」。
這裏($ var ==('B'||'C'))是不正確的,或者我錯過了什麼?

創建PHP小提琴:http://phpfiddle.org/main/code/wju-46r

+0

因爲在第二次,你正在做'B'和'C'的OR,然後將結果與$ var進行比較; 'B'或'C'將評估爲布爾(真),所以你得到類型鑄造$ var到布爾值來與布爾真正的比較 –

回答

1

這有沒有關係三元運算符。這是關於type juggling和比較。

在第二種情況下,你在做'B' || 'C'這將被視爲true - 因爲||邏輯操作。所以'A' == true是真的,因爲類型雜耍,因此B or C將是你的結果

0

echo($ var ===('B'||'C'))? 'B或C':'A';

這是您必須檢查數據類型的正確答案。

+1

這不會工作,如果你給$ var ='B'...它會給你'A' – Kalpit