PHP逻辑运算符的顺序

时间:2013-02-21 17:16:00

标签: php

我很好奇PHP如何使用嵌套处理条件语句/操作顺序。如果我使用以下if条件:

if(x == (1 || 2))
{
    // do something
}

我希望它的行为与

相同
if(x == 1 || x == 2)
{
    // do something
}

......但事实并非如此。我的第一个例子似乎是一个方便的速记,非常有意义,但它没有做我期望的。任何人都可以对这个问题有所了解吗? PHP对我的第一个陈述究竟做了什么?

8 个答案:

答案 0 :(得分:2)

您的简写在逻辑上无效。几乎在每种情况下,您都必须为要测试的所有可能性写出完整的逻辑案例。

我说'差不多'因为在PHP中你可以做一些荒谬的事情,如:

if( in_array($x, array(1,2)) ) {
  // code!
}

答案 1 :(得分:2)

所以对于这段代码:

if ($x == ( 1 || 2)) 
{
    // do something
}

在PHP中,任何非零数字都被认为是真的。免责声明:这一事实在其他语言中并不一定如此。所以在PHP中,0是唯一被认为是假的数字。所以你在上面的代码中询问是否$x == true

因此,只要$x是0以外的任何数字,if内的语句将解析为true。但是,当$x = 0时,这相当于说false == true当然会解析为false

这篇文章可能有所帮助:PHP: Booleans

答案 2 :(得分:1)

x == (1 || 2) 

evaluates like this:

(1 (if its false) then testing for 2, if not, the expression returns true)

now it will become:

if(x==true)?

取自(PHP.NET)的另一个例子:

  

// foo()永远不会被调用,因为那些运算符是短路的

$b = (true  || foo()); 

答案 3 :(得分:1)

请在此处查看运营商的优先顺序 http://php.net/manual/en/language.operators.precedence.php

答案 4 :(得分:1)

它的行为与数学(想想BEDMAS)相同,首先执行括号。因此,您的示例表现为:

if (x == ( 1 || 2)) {
  //code
}

因为1和2都是非零值(因此都是真的),你得到:

if (x == true) {
  //code
}

不幸的是得到你想要的东西:

if (x == 1 || x == 2) {
  //code
}

答案 5 :(得分:0)

首先,如果评估1||2的结果并检查它是否等于x

其次是this or this or this

然而,首先你可以看到var_dump(1 || 2)每次都返回true,所以

 $x = 3;
 var_dump($x == 1 || 2);
 if($x == 1 || 2){
     echo 'inside if';
  }

也是true因此它会打印inside if甚至$ x是3

所以imo第二种方式是要走的路

答案 6 :(得分:0)

怎么会有意义?您要求计算机执行以下逻辑表达式:

如果x ==(1 || 2) x ==(1 || 2的结果)相同

所以你的表达式是 x == true ,因为 1 || 2 会返回true

计算机会执行您要求他们执行的操作

答案 7 :(得分:0)

if(x == (1 || 2))
{
    // do something
}

ORAND操作通过TRUEFALSE返回 你的陈述说 - 如果x等于(真) - 因为1 or 2将永远为真 - 这没有意义......