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'] 不能同时是两个不同的东西。你说 int 第一个表达式;p 不在家或不创建.account。它总是正确的。你应该使用 && 而不是 ||

于 2009-09-02T22:40:01.160 回答
3

您可以通过DeMorgans Laws看到问题是否定

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

您提供的解决方案是不可能的,因为这两个语句都不可能是错误的,因为这意味着该字符串等同于两个比较字符串。else 块被命中的唯一方法是如果两者都为假(因为 OR 语句)。

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

(X == A) && (X == B)自条件以来始终为假,A != BX不能同时为A两者B。所以!((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 回答