Сегодня нашел интересный фрагмент кода. Упрощенный, он выглядит так:
$var = null; $var or $var = '123'; $var or $var = '312'; var_dump($var);
Дело в том, что, как я знаю, приоритет присваивания выше, чем OR , поэтому, как я полагаю, var_dump должен выводить 312 (first-assign, second-compare логически). Но результат делен, я получаю 123 (сначала – проверьте, преобразует ли $var в true , second – if not, присваивает значение).
Вопросы в том, как это работает?
Почему поведение одинаково для or || ?
Вы можете увидеть примеры этого поведения в Logical Operators
Также вы можете прочитать статьи о короткозамкнутой оценке
Выражение короткого замыкания
x Sand y(с использованием Sand для обозначения короткого замыкания) эквивалентно условному выражению,if x then y else false;выражениеx Sor yравносильно тому,if x then true else y.
В php.
return x() and y();
равно
if (x()) return (bool)y(); else return false;
return x() or y();
равно
if (x()) return true; else return (bool)y();
Итак, дело не просто в приоритете.
Это так же, как
$var = null; if(!$var)$var = '123'; if(!$var)$var = '321'; var_dump($var);