Использование and или в условных обозначениях для удобства чтения вместо

#php #operators

#php #операторы

Вопрос:

Часто, когда я пишу PHP, я создаю условные обозначения, подобные этому:

 if(1 === $var1
   and 2 === $var2
   or 1 == $var3) {
   // do something here maybe
}
  

Я думаю, что это делает их более простыми и естественными для чтения. Я знаю, что это, вероятно, смешно, когда я использую Yodas.

Причина, по которой каждому условию в отдельной строке предшествует and or or , заключается в том, что это упрощает комментирование части инструкции при отладке.

Есть ли какой-либо недостаток в этом по сравнению с «обычным» || and amp;amp; ?

Комментарии:

1. отдельная строка — это вроде как неплохо. Но какое это имеет отношение к and vs amp;amp; или or vs || ? amp;amp; Оператор имеет более высокий приоритет, чем and , поэтому их использование не эквивалентно.

2. @dnagirl Вы правы, абсолютно никакого отношения к вопросу, просто захотелось объяснить это там.

Ответ №1:

or и and не имеют того же приоритета оператора, что || и amp;amp; . Это означает, что в для определенных значений выражений [a] и [b] , [a] and [b] != [a] amp;amp; [b] . Это может привести к неочевидным ошибкам.

Приоритет операторов PHP

Обратите внимание, что одно имеет более высокий приоритет, чем присвоение, в то время как другое — нет. Это тонкое различие, и даже если вы это понимаете, другие разработчики, читающие ваш код, могут не понимать. В результате я лично рекомендую использовать только amp;amp; и ||

Операторы Ruby в этом отношении похожи на PHP. Джей Филдс опубликовал простой пример разницы.

Комментарии:

1. Может быть, не только, а скорее все вместе? Используйте в парах, будьте последовательны, чтобы избежать тонких, трудноуловимых ошибок, если вы чувствуете необходимость использовать and use or с ним.

2. Согласен: лучше выбрать одну пару и придерживаться ее. Смешивание двух или, не дай бог, замена одного другим по эстетическим соображениям — вот где вы попадаете в беду.

3. Интересно отметить, что для xor не существует символьного оператора, поэтому в этом случае вам придется использовать именованный оператор. Я использую xor не так много, но если вы используете, это может повлиять на ваш выбор, какой стиль использовать для обеспечения согласованности.

Ответ №2:

В PHP нет существенной функциональной разницы между and и amp;amp; , ни между or и || .

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

По этой причине, как правило, хорошей идеей является использование одного или другого стиля операторов и придерживаться его, а не смешивать их в одной базе кода (это также хорошая идея для удобства чтения). Но выбор, какую пару операторов использовать, довольно несущественен.

В остальном, это в основном одно и то же.

Смотрите здесь о приоритете операторов PHP: http://php.net/manual/en/language.operators.precedence.php

(обратите внимание на разные позиции в таблице and и or против amp;amp; и || )

Комментарии:

1. Я бы сказал, что разница в приоритете операторов является существенным функциональным различием. Особенно потому, что одно имеет более высокий приоритет, чем присвоение, в то время как другое ниже. Это означает, что $a = $b and $c имеет совершенно иное значение, чем $a = $b amp;amp; $c

2. @Frank: Я согласен, что это важно, и я согласен, что важно знать разницу. Я бы не назвал это функционально другим, хотя, потому что автономная функциональность двух операторов идентична. Но я думаю, что это просто лингвистический аргумент; мы в основном согласились, и я дал вашему ответу 1.