Приоритет операторов «или» и присвоение

Сегодня нашел интересный фрагмент кода. Упрощенный, он выглядит так:

$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);