我用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;
没有像我期望的那样工作。
答案 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";