PHP - и / или ключевые слова
Является &&
так же, как "и", и есть ||
так же, как "или" в PHP?
Я сделал несколько тестов, и, похоже, они ведут себя одинаково. Есть ли различия?
Если нет, есть ли другие знаки PHP, которые имеют эквиваленты слов, и думаете ли вы, что это облегчает чтение кода?
4 ответа
and
а также or
имеют более низкий приоритет, чем &&
а также ||
, Чтобы быть более точным &&
а также ||
имеют более высокий приоритет, чем оператор присваивания (=
) в то время как and
а также or
иметь ниже.
http://www.php.net/manual/en/language.operators.precedence.php
Обычно это не имеет значения, но бывают случаи, когда незнание этой разницы может привести к неожиданному поведению. Смотрите примеры здесь:
Да, они логически одинаковы. (Я полагаю, что "&&" и "||" являются предпочтительным выбором в стандартах кодирования Zend, но я не могу найти какую-либо конкретную информацию по этому поводу, так что, возможно, все это было мечтой.
Это говорит:
"&&" и "||" имеют более высокий приоритет, чем "И" и "ИЛИ" (вряд ли когда-либо будут актуальны, но вы никогда не знаете).
Многие другие языки используют "&&" и "||", а не текстовые эквиваленты, так что это может быть идея, чтобы пойти с этим.
Пока вы постоянно используете выбранный вами набор операторов, это не имеет значения.
Что беспокоит меня:
echo (false and false ? true : true);
// (empty/false)
Вы можете догадаться, что возможен только вывод "1" (true), поскольку нет ни одного случая, который мог бы вывести false...... но это будет "" (false).
Использование && в качестве оператора в этом случае оправдывает, по крайней мере, мои ожидания:
echo (false && false ? true : true);
// 1
Таким образом, в некоторых случаях использование имеет большое значение.
Разница в приоритете. Но не только по сравнению друг с другом!
В большинстве случаев вы не будете возражать, но есть конкретные случаи, когда вам нужно сделать шаг назад и посмотреть на картину в целом. Возьмите это, например:
// 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