PHP为什么我的“if”语句总是为真?

PHP为什么我的“if”语句总是为真?,php,if-statement,boolean,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,而是宇宙中的,所以我不明白。我认为如果FAL

我用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,而是宇宙中的,所以我不明白。我认为如果FALSE | | TRUE==FALSE,那么第二个例子就不是这样了。它按预期工作

那么,答案在哪里呢?如何说:如果变量不是1或2-echo true。我不明白为什么我的if$var!=1或$var!=2回声真实;不像我想象的那样有效

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

按预期工作。如果$action为1或2,则基本上为true。

对$action的否定!=1 | |$action!=2是$action==1&&$action==2。您可以自己看到后者总是错误的,因为变量不能同时为1和2。因此,原始条件必然始终为真。

它正在按其必须的方式工作。见医生

如果$a或$b为真,$a | |$b返回真

如果你试着这样做,希望它有意义,看看每一行的评论

$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)

条件或将搜索第一个TRUE结果,您的代码将始终为TRUE,因为任何值都不是1或2。 例如,如果$action=1,则条件$action!=2将给出true,如果$action=2,则$action!=我会给你答案

如果变量不是1或2-echo true,请使用以下命令:

if(!in_array($action, array(1,2)) echo "true";
编辑: 您也可以这样检查:

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

假| |真==真。你的第一个条件不可能是假的。这就是| |的要点,如果任一参数为真,则为真。如果action不是1或不是2-$action不能同时为1和2,它总是不是一个或另一个。如果为假,您希望第一个值是什么?如果$var!=1 | |$var!=2回声真实;假设我的$var是3。3 != 1和3!=2.两个FALSE,那么为什么示例仍然给我true?它也会返回true,因为NULL!=1 | |空!=所以这是真的| |真的意思是真的。但是要注意一下。注意:未定义变量:var有意义吗@mevsme@mevsme因为for和TRUE,如果$a和$b都为TRUE。为了你的条件。3 != 1`返回true,3!=2返回true,因此最终为true,而true按意图确保为true。问题不在于这句话。如果$action!=2&&$action!=1回声为真;