在IF()中使用PHP布尔测试时,为什么要使用一组额外的括号


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

很抱歉,这个问题的标题很奇怪。我找不到一个好的表达方式!

这个想法很简单,有时你会看到PHP测试是这样的:

if (!a_function("something")) { }

在这里,你可以把它想象成"如果不是真的"。我有时看到完全相同的东西,但有额外的透明度:

if (!(a_function("something"))) { }

为什么爆炸后需要额外的parenz?它们本质上不是指if (!true)吗?

对于额外的奖励,这两种风格的原因是什么(这有名字吗。


更新:

以下是我正在使用的PHP脚本中的一个示例,作者正在测试环境变量,并且似乎可以互换使用这些样式:

if (!(extension_loaded("iconv"))) { ... }
if (!(extension_loaded("xml"))) { ... }
if (!function_exists("json_encode")) { ... }
if (!ini_get("short_open_tag")) { ... }

我知道你不能在这里回答程序员的问题,但当这些小函数紧挨着时,他们为什么要交替使用额外的parenz?我碰巧知道,例如,ini_get的返回值就是数字1,extension_loaded函数的返回值也可能只是数字1,所以看起来没有什么区别。我不能100%确定除了简单的偏好或操作顺序之外,没有其他技巧。

更新2:

我知道parenz既可以用于清晰度,也可以用于操作顺序,但我不相信这只是个人偏好。在我上面的例子中,一切都取决于正在测试的函数返回的内容。

我的理解是,通过用parenz包装一个语句,PHP将强制它变成bool。但是,当它不在parenz中时,是否会有一个返回值破坏代码,而不使用它周围的parenz来强制布尔?

在我上面的示例代码中,如果人们说除了个人偏好之外什么都没有,那么我只能接受这一点,但我对此表示怀疑。

如果有多个具有不同优先级的逻辑运算符,则会使用括号,以指示在处理完所有其他运算符后必须应用"!"运算符。例如:

if(!($var1 < $var2)) 

如果$var1小于$var2,将首先检查,然后如果结果为false,将检查。

如果使用:

if(!$var1 < $var2) 

然后将首先检查$var1是否为false,并将结果与$var2进行比较,这根本没有意义。

这不是必需的。这是个人喜好的问题。有时,您希望有额外的parens来确定表达式的求值方式。

 if(a or b and c) 

令人困惑。

 if ((a or b) and c) 

更加清晰。

 if(a or (b and c))

更加清晰。

它们都有效,但有些人可能对哪一个更可读有不同的看法。

在给定的情况下不需要圆括号,但如果您同时分配一个变量,则可以使用圆括号:

if (($myVar = myFunc()) !== false) {
    // Doing something with $myVar, ONLY if $var is not false
}

而在以下情况下,它将改变的逻辑

if ($myVar = myFunc() !== false) {
    // Here $myVar = true or false instead of the wanted value
}
if( !(should_return_trueA() && should_return_trueB())) {
    // at least one have returned false
}

本质上与相同

if( !should_return_trueA() || !should_return_trueB() ) {
    // at least one have returned false
}

就我而言,这是一种避免错用感叹号的做法。当构建更复杂的条件并寻找全假或全真结果时,这很有用。