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

Является ли && тем же, что и "и", и || совпадает с "или" в PHP?

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Это сказало:

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

  • Многие другие языки используют "& &" и "||" , а не текстовые эквиваленты, поэтому может возникнуть идея пойти с этим.

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

Ответ 3

Меня беспокоит:

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

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

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

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

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

Ответ 4

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

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

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