Зачем использовать дополнительный набор круглых скобок при использовании булевого теста 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 можно использовать как для ясности, так и для порядка операций, но я не уверен, что это только личное предпочтение. В моем примере выше все зависит от того, что возвращается проверенными функциями.

Я понимаю, что, завернув оператор в parenz, PHP заставит его превратить его в bool. Но когда это не в parenz, может ли быть возвращаемое значение, которое нарушает код, не используя parenz вокруг него, чтобы заставить bool?

Если люди говорят, что в моем примере код выше, что нет ничего, кроме личных предпочтений, тогда я просто должен это принять, но у меня есть сомнения.

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

  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 } 

Это, в моем случае, практика, чтобы избежать ошибочных / оммированных восклицательных знаков. Полезно, когда вы строите более сложные условия и ищете все-ложные или все-истинные результаты.

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

 if(!($var1 < $var2)) 

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

Если вы используете:

 if(!$var1 < $var2) 

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