2009-09-02 53 views
0

在下面的PHP,如果我比較使用==它的工作原理,因爲我希望它,如果我用!=然後我的代碼休息,有人可以解釋或幫助一個變量?PHP的if/else錯誤

$_GET['p'] = 'home'; 

// DOES NOT work, it will always return "show JS" regardless to what string I have 
if ($_GET['p'] != 'home' || $_GET['p'] != 'create.account'){ 
    echo 'show JS'; 
}else{ 
    echo 'do not show JS'; 
} 

// Works as I would expect it to 
if ($_GET['p'] == 'home' || $_GET['p'] == 'create.account'){ 
    echo 'do not show JS'; 
}else{ 
    echo 'show JS'; 
} 

回答

9

$ _GET ['p']不能同時是兩個不同的東西。你說int是第一個表達式; p不在家或不是create.account。它總是如此。您應該使用& &而不是||

+0

偉大的作品 – JasonDavis 2009-09-02 22:42:54

+3

+1簡單德摩根定律(http://en.wikipedia.org/wiki/Demorgan%27s_law) – 2009-09-02 22:44:14

0
if ($_GET['p'] != 'home' && $_GET['p'] != 'create.account') 
+0

因爲http://en.wikipedia.org/wiki/Logical_disjunction 的誤用(假或者真)==真 – balint 2009-09-02 22:45:12

2
(X != A) || (X != B) 
≡ !(X == A) || !(X == B) 
≡ !((X == A) && (X == B)) 

(X == A) && (X == B)永遠是假的,因爲條件A != BX不能同時AB在同一時間。因此!((X == A) && (X == B))(X != A) || (X != B)總是如此。

3

您可以通過DeMorgans Laws爲否定看到問題

!(A || B) === (!A && !B) 

你給的解決方案是不可能的,因爲沒有辦法讓兩個語句是假的,因爲這將意味着該字符串相當於兩個比較字符串。 else塊將被擊中的唯一方法是如果兩者都是假的(由於OR語句)。