PHP if / else错误

时间:2009-09-02 22:36:42

标签: php demorgans-law

在下面的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 个答案:

答案 0 :(得分:9)

$ _ GET ['p']不能同时是两个不同的东西。你说第一个表达式; p不在家或不是create.account。它总是如此。你应该使用&&而不是||

答案 1 :(得分:3)

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

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

你提供的解决方案是不可能的,因为两个语句都没有办法是假的,因为这意味着字符串等同于两个比较的字符串。 else块被击中的唯一方法是两者都是假的(因为OR语句)。

答案 2 :(得分:2)

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

(X == A) && (X == B)始终为false,因为条件A != BX不能同时为AB。因此!((X == A) && (X == B))和您的(X != A) || (X != B)始终是真的。

答案 3 :(得分:0)

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