在 if with and/or 语句 PHP 中正确使用括号

Posted

技术标签:

【中文标题】在 if with and/or 语句 PHP 中正确使用括号【英文标题】:Proper use of parentheses in if with and/or statements 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 我总是使用第二个选项来获得更多的理解和分组。 【参考方案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()?

【讨论】:

以上是关于在 if with and/or 语句 PHP 中正确使用括号的主要内容,如果未能解决你的问题,请参考以下文章

PHP 运算符 if 语句 'and' 和 'or'

NGINX实现IF语句里的AND,OR多重判断

练习--第一次课(运算if while 字符编码)

php 同时使用and or怎么写

JS中使用逻辑 AND/OR 做条件判断及函数默认值

在 Google 表格中使用 IF、AND/OR(许多条件)和数组公式