我有以下代码:
$_SESSION['user_role'] = 1;
if ($_SESSION['user_role'] != '1' || $_SESSION['user_role'] != '2') {
return false;
} else {
return true;
}
为什么if()总是返回false?
答案 0 :(得分:9)
因为user_role
不能同时为1 和 2。让我们来看看所有可能的值:
1: != 2
2: != 1
anything else: != 1, != 2
你可能想写下你的情况如下
if(!($_SESSION['user_role'] == 1 || $_SESSION['user_role'] == 2)) {
return false;
} else {
return true;
}
相当于:
if($_SESSION['user_role'] != 1 && $_SESSION['user_role'] != 2)) {
return false;
} else {
return true;
}
(布尔代数)
你的情况甚至可以在没有if:
的情况下写出来return $_SESSION['user_role'] == 1 || $_SESSION['user_role'] == 2;
PS。不要使用魔法值
为了完整起见,这是一个真值表:
A := user_role == 1
B := user_role == 2
| A | B | !B | !A | A or B | !A or !B | !(A or B) | !A and !B
--+---+---+----+----+--------+----------+-----------+-----------
1 | T | F | T | F | T | T | F | F
2 | F | T | F | T | T | T | F | F
--+---+---+----+----+--------+----------+-----------+-----------
3 | F | F | T | T | F | T | T | T
4 | F | F | T | T | F | T | T | T
5 | F | F | T | T | F | T | T | T
...
从表格中您可以立即看到!(A or B)
等同于!A and !B
答案 1 :(得分:0)
为了让你做对的代码:
$condition1 = ($_SESSION['user_role'] != '1');
$condition2 = ($_SESSION['user_role'] != '2');
$result = ($condition1 || $condition2);
var_dump($condition1,$condition1,$result);
如果怀疑某种逻辑表达的结果,我总是这样做。