对不起,这个问题的标题很奇怪。我找不到一个好的方法来说出来!
这个想法很简单,有时你会看到这样的PHP测试:
if (!a_function("something")) { }
在这里你可以把它想象成“如果不是真的”。我有时看到完全相同的东西,但有额外的parenz:
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强制一个bool?
如果有人说,在上面的示例代码中,除了个人偏好之外什么都没有,那么我只需要接受,但我有疑虑。
答案 0 :(得分:2)
如果有多个逻辑运算符具有不同的优先级,则使用括号,以指示"!"必须在处理完所有其他运算符后应用运算符。例如:
if(!($var1 < $var2))
首先检查$ var1是否小于$ var2,然后检查结果是否为false。
如果使用:
if(!$var1 < $var2)
然后首先检查$ var1是否为false并且结果将与$ var2进行比较,这根本没有意义。
答案 1 :(得分:0)
这不是必需的。这是个人喜好的问题。有时候你喜欢额外的parens来确定如何评估表达式。
if(a or b and c)
令人困惑。
if ((a or b) and c)
更清楚。
if(a or (b and c))
更清楚。
答案 2 :(得分:0)
它们都有效,但有些人可能对哪一个更具可读性有不同的看法。
答案 3 :(得分:0)
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
}
在我的情况下,这是一种避免错误/遗漏感叹号的做法。在构建更复杂的条件并寻找全假或全真结果时很有用。
答案 4 :(得分:0)
在给定的情况下不需要括号,但例如,如果您同时分配变量,则可以是括号:
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
}