【问题标题】:Logical Operators and Precedence逻辑运算符和优先级
【发布时间】:2015-06-10 11:28:50
【问题描述】:

所以我只是做了一些随机测试并了解了 Precedence 以及 ||or 运算符的基本原理,但我无法理解为什么 $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";
}

感谢您的见解。

【问题讨论】:

    标签: php logic php-5.3 logical-operators


    【解决方案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,除非您进行严格比较 === 或 !==

    【讨论】:

      【解决方案2】:

      总是评估为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 上了解更多信息

      【讨论】:

      • 为什么即使 $f 为空,if ($f === 0 or 1) 仍为 true?
      • 我可以看到你是新来的,所以如果这个答案解决了你的问题,请将其标记为正确答案,以帮助其他有同样问题的人
      • 因为如果 OR 语句的参数之一为真,则它们的计算结果为真。只有当所有参数都为真时,AND 语句才会评估为真
      • 更新的问题,我问的实际问题,抱歉错别字,更新答案后将接受:)!
      • 问题是关于为什么 $f 会改变 btw。
      【解决方案3】:

      问题出在这里:“if ($f = 0 or 1){”:

      "=" 表示你给变量 $f 赋值 0

      你应该使用:

      • "==" : 检查值是否相等
      • "===" :检查左侧变量是否与右侧变量相同(值、类型等)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2023-01-31
        • 2015-09-20
        相关资源
        最近更新 更多