Зачем использовать дополнительный набор скобок при использовании логического теста PHP в IF ()?

Извините, заголовок этого вопроса странный. Я не мог найти хороший способ сказать это!

Идея проста, иногда вы видите тесты 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

Решение

круглые скобки используются в случае, если существует более 1 логического оператора с различным приоритетом, чтобы указать, что «!» оператор должен применяться после обработки всех других операторов. Например:

if(!($var1 < $var2))

Сначала будет проверен, если $ var1 меньше, чем $ var2, и после этого будет проверен, если результат ложен.

Если использовать это:

if(!$var1 < $var2)

затем сначала будет проверено, является ли $ var1 ложным, и результат будет сравниваться с $ var2, что просто не имеет смысла.

2

Другие решения

Это не обязательно. Это вопрос личных предпочтений. Иногда вы хотели бы иметь лишних паренов, чтобы быть ДОПОЛНИТЕЛЬНО уверенными в том, как выражение будет оцениваться.

 if(a or b and c)

сбивает с толку.

 if ((a or b) and c)

гораздо понятнее

 if(a or (b and c))

гораздо понятнее

0

Они оба работают, но у некоторых людей могут быть разные мнения о том, какое из них более читабельно.

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
}
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
}

В моем случае это практика избегать ошибочных / опущенных восклицательных знаков. Полезно при построении более сложных условий и поиске результата «все ложно» или «полностью верно».

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector