0

以下のPHPでは、 ==を使用して変数を比較すると、期待どおりに機能します。!=を使用すると、コードが壊れます。誰かが説明または支援できますか?

$_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'; 
}
4

4 に答える 4

9

$_GET['p']を同時に2つの異なるものにすることはできません。あなたは最初の表現をintと言います。pホームではないかcreate.accountではありません。その常に真実。||の代わりに&&を使用する必要があります

于 2009-09-02T22:40:01.160 に答える
3

あなたは否定のためのド・モルガンの法則による問題を見ることができます

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

文字列が比較された両方の文字列と同等であることを意味するため、両方のステートメントがfalseになる方法がないため、提供する解決策は不可能です。elseブロックがヒットする唯一の方法は、両方がfalseの場合です(ORステートメントのため)。

于 2009-09-02T22:51:19.530 に答える
2
    (X != A) ||  (X != B)
≡  !(X == A) || !(X == B)
≡ !((X == A) &&  (X == B))

(X == A) && (X == B)条件なので常にfalseですA != Bが、同時に両方にXすることはできません。だからそしてあなたはいつも真実です。AB!((X == A) && (X == B))(X != A) || (X != B)

于 2009-09-02T22:50:37.597 に答える
0
if ($_GET['p'] != 'home' && $_GET['p'] != 'create.account')
于 2009-09-02T22:41:18.133 に答える