Прости, что название этого вопроса странно. Я не мог найти хороший способ сказать это!
Идея проста, иногда вы видите 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, что просто не имеет смысла.