PHP - и / или ключевые слова - PullRequest
       3

PHP - и / или ключевые слова

22 голосов
/ 21 декабря 2010

Является ли && таким же, как "и", и является || таким же, как "или" в PHP?

Я провел несколько тестов, и, похоже, они ведут себя одинаково. Есть ли различия?

Если нет, есть ли другие знаки PHP, которые имеют эквиваленты слов, и думаете ли вы, что это облегчает чтение кода?

Ответы [ 4 ]

36 голосов
/ 21 декабря 2010

and и or имеют более высокий меньший приоритет, чем && и ||. Точнее, && и || имеют более высокий приоритет, чем оператор присваивания (=), а and и or имеют более низкий.

http://www.php.net/manual/en/language.operators.precedence.php

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

http://php.net/manual/en/language.operators.logical.php

6 голосов
/ 21 декабря 2010

Да, они логически одинаковы. (Я полагаю, что «&&» и «||» являются предпочтительным выбором в стандартах кодирования Zend , но я не могу найти какую-либо конкретную информацию по этому поводу, так что все это могло быть мечтой. .)

Это говорит:

  1. "&&" и "||" имеют более высокий приоритет , чем "И" и "ИЛИ" (вряд ли когда-либо будут актуальны, но вы никогда не знаете).

  2. Многие другие языки используют «&&» и «||», а не текстовые эквиваленты, так что, возможно, было бы неплохо пойти с этим.

  3. Пока вы постоянно используете выбранный набор операторов, это не имеет значения.

3 голосов
/ 29 мая 2016

Что меня беспокоит:

echo (false and false ? true : true);
// (empty/false)

Вы можете догадаться, что возможен только вывод "1" (истина), поскольку нет ни одного случая, который мог бы вывести ложь ... ... но это будет "" (ложь).

Использование && в качестве оператора в этом случае оправдывает, по крайней мере, мои ожидания:

echo (false && false ? true : true);
// 1

Итак, в некоторых случаях использование имеет большое значение.

1 голос
/ 10 октября 2016

Разница в приоритете . Но не только по сравнению друг с другом!

В большинстве случаев вы не будете возражать, но есть конкретные случаи, когда вам нужно сделать один шаг назад и посмотреть на картину в целом. Возьмите это, например:

// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;

// The constant true is assigned to $h before the "and" operation occurs
// Acts like: (($h = true) and false)
$h = true and false;

var_dump($g, $h);

Это даст соответственно:

bool(false)
bool(true)

Другими словами, && имеет более высокий приоритет, чем =, который имеет более высокий приоритет, чем and, как указано в http://php.net/manual/en/language.operators.precedence.php. (упоминается в других ответах, но я думаю, что стоит подробно, поскольку неправильное использование может привести к логическим ошибкам) ​​

Надеюсь, это может вам помочь. Вы можете найти больше на http://php.net/manual/en/language.operators.logical.php

...