【问题标题】:Proper use of parentheses in if with and/or statements PHP在 if with and/or 语句 PHP 中正确使用括号
【发布时间】:2015-08-26 10:45:05
【问题描述】:

这是一个荒谬的问题......主要是希望证明我的老程序员朋友错了。

我写这样的 if 语句(其中带有 AND/OR 的语句),我一直都知道...

if($something == $something OR $whatever == $whatever){stuff...}

我的老朋友是这样做的……

if(($something == $something) OR ($whatever == $whatever)){stuff...}

我以前从未见过有人这样做。它运行没有错误。我告诉他那是无效的代码,但他耸耸肩说它可以运行。它有效吗?我的意思是......它确实运行。额外的字符,所以我的仍然获胜。这是用 PHP 做的旧方法吗?我找不到关于后一种风格的任何信息。只是一种古玩。谢谢。

【问题讨论】:

  • 这是一回事,因为==OR 有先例。如果这是分配,那可能是个问题:if($a = 'now' && $b = $a.' what')$test = $b;if(($a = 'now') && ($b = $a.' what'))$test = $b;
  • 您使用更多的括号来避免运算符的优先级问题。
  • 两者都可以正常运行。这是评估的过程,因此有或没有对单个逻辑运算符的影响很小。我还要说你们都错了,应该是||PSR-2
  • 通常的做法是使用 ||而不是 OR 和 && 而不是 AND
  • 我总是使用第二个选项来获得更多的理解和分组。

标签: php styles


【解决方案1】:

这是完全正确的,有些人可能会争辩说括号更容易阅读,但是没有正确的方法。

如果你有三个... :O

语法上,这种格式的东西

if ( a == b OR a == c OR a == d )

可能与这种格式的东西完全不同

if ( a == b OR ( a == c OR a == d ) )
if ( ( a == b OR a == c ) OR a == d )

【讨论】:

  • 实际上所有的例子都会产生相同的结果,因为都是OR。但是例子很好理解问题的答案。
【解决方案2】:

括号也称为分组运算符,用于使优先级较低的表达式在优先级较高的表达式之前计算。

需要内部 if 语句表达式,根据运算符的优先级使用 Shunting Yard 等算法进行解析。

因此,无论您向某个表达式添加多少分组运算符,该表达式已经保证在其他二元运算符之前被评估(在您的情况下为 OR)

例如。 4*3 + 5 与 (4*3) + 5 相同(因为* 具有更高的优先级,将在之前进行评估)

累加。调车场你的postfix表达是

$something $something == $whatever $whatever == OR

和你的老朋友postfix也是

$something $something == $whatever $whatever == OR

唯一的区别是你的微快,而他的可能更易读

【讨论】:

    【解决方案3】:

    老人的方法没有错。两种方式都可以写。这是因为您可以将复杂的布尔表达式一直评估为真或假,这就是所需要的。如果有人说用尽可能少的括号写这个表达式,那么你的方法将是“正确的”。

    【讨论】:

      【解决方案4】:

      两者都是有效的方式,第二种方式,带有额外的括号更具可读性。

      Why use an extra set of parenthesis when using PHP boolean test in an IF()?

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 1970-01-01
        • 2021-10-27
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        相关资源
        最近更新 更多