Из того, что я вижу, приоритет операторов имеет смысл в этих двух примерах:
$a = false;
$b = true;
$c = $a || $b;
Здесь $ c правда
$a = false;
$b = true;
$c = $a or $b;
Здесь $ c ложный
Я понимаю причины этого. Однако следующее:
$a = false;
$b = true;
return $a or $b;
Возвращает истину, которая озадачивает меня.
Что является причиной этого?
or
имеет более низкий приоритет, чем =
так вот:
$c = $a or $b;
Становится так:
($c = $a) or $b;
Но это не имеет смысла:
(return $a) or $b;
Итак, вы получите это:
return ($a or $b);
В выражении применяется приоритет оператора. =
, ||
а также or
все операторы и $c = $a or $b
это выражение. И в соответствии с приоритетом оператора он оценивается как ($c = $a) or $b
,
Тем не мение, return
это заявление. return
не является оператором и не группируется по приоритету оператора. Это всегда оценивается как return <expression>
и, следовательно, всегда как return ($a or $b)
,
Результат выражение $c = $a or $b
является true
КСТАТИ. $c
назначается false
в ходе выражения, но выражение в целом возвращает значение true
($b
). Так что даже это return true
:
return $c = $a or $b;