如果条件问题在PHP中很奇怪

时间:2011-11-22 13:15:15

标签: php

我有以下代码:

$_SESSION['user_role'] = 1;

if ($_SESSION['user_role'] != '1' || $_SESSION['user_role'] != '2') {
    return false;
} else {
    return true;
}

为什么if()总是返回false?

2 个答案:

答案 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);

如果怀疑某种逻辑表达的结果,我总是这样做。