代码之家  ›  专栏  ›  技术社区  ›  ts.

'和'vs'&&'作为运算符

  •  264
  • ts.  · 技术社区  · 15 年前

    我有一个开发人员决定使用的代码库 AND OR 而不是 && ||

    我知道运算符的优先级不同( && 走在前面 and ),但在给定的框架下( PrestaShop 确切地说)这显然不是一个理由。

    你用的是哪个版本?是 可读性比 && ? 还是没有区别?

    11 回复  |  直到 5 年前
        1
  •  682
  •   Samuel Dauzon    7 年前

    如果你使用 AND OR

    $this_one = true;
    $that = false;
    
    $truthiness = $this_one and $that;
    

    你猜怎么着 $truthiness 等于?

    如果你说 false

    $真实性 以上有价值 true . 为什么? = 有一个 higher precedence and . 添加括号以显示隐式顺序使这一点更清楚:

    ($truthiness = $this_one) and $that
    

    如果你用过 && 而不是 在第一个代码示例中,它将按预期工作,并且

    正如在下面的注释中所讨论的,这也可以获得正确的值,因为括号的优先级高于 =

    $truthiness = ($this_one and $that)
    
        2
  •  44
  •   Marco Demaio    14 年前

    取决于它的使用方式,它可能是必要的,甚至是方便的。 http://php.net/manual/en/language.operators.logical.php

    // "||" has a greater precedence than "or"
    
    // 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;
    

        3
  •  13
  •   Captain Kenpachi    12 年前

    为了安全起见,我总是把我的比较用括号括起来,把它们隔开。这样,我就不必依赖运算符优先级:

    if( 
        ((i==0) && (b==2)) 
        || 
        ((c==3) && !(f==5)) 
      )
    
        4
  •  12
  •   arviman    12 年前

    &&

    $predA && $predB ? "foo" : "bar"
    

    将返回一个 一串 鉴于

    $predA and $predB ? "foo" : "bar"
    

        5
  •  12
  •   Justinas    9 年前

    and 优先级低于 = 您可以在条件分配中使用它:

    if ($var = true && false) // Compare true with false and assign to $var
    if ($var = true and false) // Assign true to $var and compare $var to false
    
        6
  •  2
  •   Mahmoud Zalt    7 年前

    让我来解释和之间的区别-&&-“&“。

    逻辑与运算 它们做同样的事情,但是操作符的优先级不同。

    在一次操作中将它们混合在一起,在某些情况下可能会产生意想不到的结果 我建议始终使用&&,但那是你的选择。


    另一方面“&是一个 位与运算 . 它用于计算和操作整数值内的特定位。

    7   = 0111
    14  = 1110
    ------------
        = 0110 == 6
    
        7
  •  1
  •   salathe    15 年前

    如果我正在编写代码的特定代码库的编码标准指定应该使用哪个操作符,我将 用这个。如果没有,代码 口述 它应该被使用(不经常使用,可以很容易地解决),然后我会使用它。否则, &&

    它更可读吗 . 答案是

    对。看到了吗 logical operators 对于 || bitwise operators 对于 ~

        8
  •  1
  •   Ken    6 年前

    另一个很好的例子是 if = 分配操作。

    if (true || true && false); // is the same as:
    if (true || (true && false)); // TRUE
    

    if (true || true AND false); // is the same as:
    if ((true || true) && false); // FALSE
    

    因为 AND 优先级较低,因此 || 更高的优先级。

    这与 true, false, false true, true, false https://ideone.com/lsqovs 举个例子。

        9
  •  0
  •   nuqqsa    11 年前

    true && false || false; // returns false
    
    true and false || false; // returns true
    

    :关于两个操作都返回false的注释。。。好吧,事实上上面的代码没有返回任何东西,我很抱歉含糊不清。澄清:第二种情况下的行为取决于如何使用操作的结果。观察操作符的优先级是如何在这里起作用的:

    var_dump(true and false || false); // bool(false)
    
    $a = true and false || false; var_dump($a); // bool(true)
    

    $a === true 因为赋值运算符优先于任何逻辑运算符,这在其他答案中已经很好地解释过了。

        10
  •  0
  •   Synchro    8 年前

    $a = true;
    $b = true;
    $c = $a & $b;
    var_dump(true === $c);
    

    输出:

    bool(false)
    

    我要说的是,这种打字错误更容易引起隐秘的问题(与 = == adn ro 将标记为语法错误的打字错误。我还发现和/或更容易阅读。FWIW,大多数表示偏好的PHP框架(大多数没有)指定和/或。我也从来没有遇到过一个真正的,不做作的案子,在那里它会很重要。