逻辑运算符和优先级

时间:2015-06-10 11:28:50

标签: php logic php-5.3 logical-operators

所以我只是进行了一些随机测试并了解Precedence的基本原理以及 || 运算符,但我无法理解为什么$ f更改:

$f = 0 || 1;

if ($f === 1){
    echo "TRUE - $f";
}else{ 
   echo "FALSE - $f";
}
$f = 0 or 1;

if ($f === 0){
    echo "TRUE - $f";
}else{ 
   echo "FALSE - $f";
}

感谢您的一些见解。

3 个答案:

答案 0 :(得分:1)

您所做的与以下相同:

if (($f = 0) or 1){ 
    // $f is being assigned the value 0, and the condition evaluates 0 or 1,
    // 1 being equivalent to true, the condition is always true.
    echo "TRUE - $f";
}else{
    echo "FALSE - $f";
}

if ($f = (0 || 1)){ // which gives $f = true which returns true
    echo "TRUE - $f";
}else{
    echo "FALSE - $f";
}

如果你想检查$ f是否等于你要做的另一个值

if ($f === 0 or $f === 1)

请注意,在php中,默认情况下,int 1将被评估为bool true,除非您进行严格的比较===或!==

答案 1 :(得分:0)

始终评估True是正常的。原因是OR表示如果其中一个值为True,则将采用此值。

更新您的新问题:

答案是“||”优先级高于“或”

// The result of the expression (false || true) is assigned to $e
// Acts like: ($e = (false || true))
$e = false || true;

// The constant false is assigned to $f and then true is ignored
// Acts like: (($f = false) or true)
$f = false or true;

您可以在我找到此示例的PHP手册网站here了解更多信息

答案 2 :(得分:0)

问题在于:" if($ f = 0或1){" :

" ="意味着你给变量$ f赋值0

您应该使用:

  • " ==" :检查值是否相等
  • " ===" :检查左变量是否与正确的变量(值,类型等)相同