在下面的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';
}
答案 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 != B
但X
不能同时为A
和B
。因此!((X == A) && (X == B))
和您的(X != A) || (X != B)
始终是真的。
答案 3 :(得分:0)
if ($_GET['p'] != 'home' && $_GET['p'] != 'create.account')