<?php
        $a=true;
        $b=true;
        $c=true;
        if($a or ($b=false) and ($c=false))
            echo "true \$a=".$a." \$b=".$b." \$c=".$c;
        else
            echo "false \$a=".$a." \$b=".$b." \$c=".$c;
        ?>输出结果为什么是true $a=1 $b=1 $c=1 

解决方案 »

  1.   


    <?php
            $a=true;
            $b=true;
            $c=true;
            if($a or ($b=false and $c=false))
                echo "true \$a=".$a." \$b=".$b." \$c=".$c;
            else
                echo "false \$a=".$a." \$b=".$b." \$c=".$c;
    ?>
    这应该是运算符优先级的问题,你的代码就相当于上面这个..and的优先级比or要高, 因为$a=true,所以就符合了条件,就执行了if的判断了
      

  2.   

    if($a=false and ($b=false or $c=false))
    跟这个同理是吗,就是说前面短路了后面的?
      

  3.   

    $b=false and $c=false你可以把它看成是一个整体..就是不管它变成什么..都会执行if里的判断,例如:if($a or $d==123){
      echo "执行if";
    }else{
      echo "执行else";
    }