(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), просто не то, что происходит в первом.