(PHP имеет ||
и OR
. JS имеет только ||
.)
JS. Согласно MDN ||
имеет более высокий приоритет, чем =
. Так что это не работает:
a || a = 1;
поскольку он оценивается как:
(a || a) = 1;
что приводит к "Недопустимая левая сторона в присваивании". Я это понимаю. Это имеет смысл.
PHP. По PHP.net он работает так же для PHP: ||
до =
, Тем не менее, я использую это все время:
$a || $a = 1;
Почему это работает в PHP? И в довершение всего: PHP OR
имеет более низкий приоритет, чем =
, поэтому они не должны делать то же самое:
$a || $a = 1;
$a OR $a = 1;
но они... https://3v4l.org/UWXMd
Я думаю, что JS '||
работает в соответствии с таблицей MDN, а PHP OR
работает как таблица PHP, но PHP ||
не должен работать так, как будто это делает.
Это еще одна странная причуда PHP?
В руководстве также упоминается следующее:
Хотя
=
имеет более низкий приоритет, чем большинство других операторов, PHP все равно позволит выражениям, похожим на следующее:if (!$a = foo())
, и в этом случае возвращаемое значениеfoo()
помещается в$a
.
В таблице приоритета указано, что PHP должен оценивать (!$a) = foo()
, что не имеет смысла и должно потерпеть неудачу, но PHP оценивает его как !($a = foo())
, потому что он любит исключения.
Последующий вопрос: Как вы думаете, if ( $d = $c && $e = $b && $f = $a )
? https://3v4l.org/3P2hN Я не понимаю... Я понимаю второй и третий случай (с and
), просто не то, что происходит в первом.