PHP为什么我的'如果'声明总是给出TRUE?

时间:2017-10-14 13:10:09

标签: php if-statement boolean

我用PHP做了一段时间,一切都很好。但是今天我没有得到这个声明。为什么总是如此?

if ($action != 1 || $action != 2) echo true; // TRUE for 0, 1, 2, 3

但反向逻辑

if ($action == 1 || $action == 2) echo true; // FALSE for 0, 3 TRUE for 1, 2

第一个表达让我大吃一惊。我想我不会理解非常基本的东西,不是在PHP中,而是在宇宙中,所以我不能在这里得到它。我认为if (FALSE || TRUE) == FALSE,但不是第二个例子的情况。它按预期工作。

那么,答案在哪里如何说:"如果变量不是1或2 - echo true"。我不明白为什么if ($var != 1 OR $var != 2) echo true;没有像我期望的那样工作。

4 个答案:

答案 0 :(得分:3)

($action != 1 || $action != 2)的否定为($action == 1 && $action == 2)。你可以自己看到后者总是假的,因为变量不能同时是1和2。因此,原始条件必然始终如一。

答案 1 :(得分:0)

    if ($action == 2 || $action == 1) echo true; // FALSE for 0, 3 TRUE for 1, 2

按预期工作。如果$ action为1或2"

,它基本上是" echo

答案 2 :(得分:0)

它正在发挥作用。请参阅文档http://php.net/manual/en/language.operators.logical.php

如果 $ a或$ b TRUE ,则

$a || $b返回TRUE。

如果您尝试这样做,希望它有意义,请参阅每行的评论

$action = 0;
var_dump($action != 1 || $action != 2); //here (true || true)
$action = 1;
var_dump($action != 1 || $action != 2); //here (false || true)
$action = 2;
var_dump($action != 1 || $action != 2); //here (true || false)
$action = 3;
var_dump($action != 1 || $action != 2); //here (true || true)

答案 3 :(得分:0)

条件OR将搜索第一个TRUE结果,您的代码将始终为TRUE,因为任何值都不是1或2。 在您的示例$action = 1,条件$action != 2将为真,如果$action = 2,则$action != 1将为真。

For(如果变量不是1或2 - echo true)请使用:

if(!in_array($action, array(1,2)) echo "true";

修改 您也可以这样检查:

if(!($action == 1 || $action == 2)) echo "true";