Извините, заголовок этого вопроса странный. Я не мог найти хороший способ сказать это!
Идея проста, иногда вы видите тесты PHP таким образом:
if (!a_function("something")) { }
Здесь вы можете думать об этом как «если не правда». Иногда я вижу то же самое, но с дополнительным паренцем:
if (!(a_function("something"))) { }
Почему после взрыва требуется дополнительный паренц? Разве они оба не имеют в виду if (!true)
?
Для дополнительного бонуса, каковы причины для этих двух стилей (есть ли у них название?) И, возможно, приведите примеры того, как они будут давать альтернативные результаты, если не используются правильно.
Обновить:
Вот пример использования сценария PHP, автор тестирует переменные среды и, кажется, использует стили взаимозаменяемо:
if (!(extension_loaded("iconv"))) { ... }
if (!(extension_loaded("xml"))) { ... }
if (!function_exists("json_encode")) { ... }
if (!ini_get("short_open_tag")) { ... }
Я знаю, что вы не можете отвечать за программиста здесь, но зачем им чередовать использование лишних символов, когда эти маленькие функции находятся рядом друг с другом?
Я случайно знаю, что, например, возвращаемое значение ini_get — это просто число 1, а возвращаемое значение функций extension_loaded также может быть просто числом 1, так что, похоже, разницы не будет. Я не на 100% уверен, что в этом нет другого трюка, кроме простого предпочтения или порядка действий.
обновление 2:
Я понимаю, что паренц можно использовать для ясности или порядка операций, но я не уверен, что это только личные предпочтения.
В моем примере выше все зависит от того, что возвращают тестируемые функции.
Насколько я понимаю, оборачивая оператор в parenz, PHP превращает его в логическое выражение. Но когда это не в parenz, может ли быть возвращаемое значение, которое нарушает код без использования parenz вокруг него, чтобы вызвать bool?
Если в моем примере кода выше люди скажут, что здесь не происходит ничего, кроме личных предпочтений, то я просто должен принять это, но у меня есть сомнения.
круглые скобки используются в случае, если существует более 1 логического оператора с различным приоритетом, чтобы указать, что «!» оператор должен применяться после обработки всех других операторов. Например:
if(!($var1 < $var2))
Сначала будет проверен, если $ var1 меньше, чем $ var2, и после этого будет проверен, если результат ложен.
Если использовать это:
if(!$var1 < $var2)
затем сначала будет проверено, является ли $ var1 ложным, и результат будет сравниваться с $ var2, что просто не имеет смысла.
Это не обязательно. Это вопрос личных предпочтений. Иногда вы хотели бы иметь лишних паренов, чтобы быть ДОПОЛНИТЕЛЬНО уверенными в том, как выражение будет оцениваться.
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
}
В моем случае это практика избегать ошибочных / опущенных восклицательных знаков. Полезно при построении более сложных условий и поиске результата «все ложно» или «полностью верно».