我有以下代码:
$_SESSION['user_role'] = 1;
if ($_SESSION['user_role'] != '1' || $_SESSION['user_role'] != '2') {
return false;
} else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
为什么if()总是返回false?
因为user_role不能同时为1 和 2.让我们来看看所有可能的值:
1: != 2
2: != 1
anything else: != 1, != 2
Run Code Online (Sandbox Code Playgroud)
你可能想写下你的情况如下
if(!($_SESSION['user_role'] == 1 || $_SESSION['user_role'] == 2)) {
return false;
} else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
这相当于:
if($_SESSION['user_role'] != 1 && $_SESSION['user_role'] != 2)) {
return false;
} else {
return true;
}
Run Code Online (Sandbox Code Playgroud)
(布尔代数)
您的病情甚至可以在没有if的情况下编写:
return $_SESSION['user_role'] == 1 || $_SESSION['user_role'] == 2;
Run Code Online (Sandbox Code Playgroud)
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
...
Run Code Online (Sandbox Code Playgroud)
从表中你可以立即看到!(A or B)相当于!A and !B
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |