條件的問題,我有以下代碼:奇怪,如果在PHP
$_SESSION['user_role'] = 1;
if ($_SESSION['user_role'] != '1' || $_SESSION['user_role'] != '2') {
return false;
} else {
return true;
}
爲什麼會這樣,如果()總是返回false?
條件的問題,我有以下代碼:奇怪,如果在PHP
$_SESSION['user_role'] = 1;
if ($_SESSION['user_role'] != '1' || $_SESSION['user_role'] != '2') {
return false;
} else {
return true;
}
爲什麼會這樣,如果()總是返回false?
因爲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
A碼爲你做對:
$condition1 = ($_SESSION['user_role'] != '1');
$condition2 = ($_SESSION['user_role'] != '2');
$result = ($condition1 || $condition2);
var_dump($condition1,$condition1,$result);
我一直在如果對某些邏輯表達的結果有所懷疑,那麼這樣做是可行的。
是的!在腳本的開頭有一個session_start()。 – Psyche