在 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 中正确使用括号的主要内容,如果未能解决你的问题,请参考以下文章