Приоритет логических операторов PHP странным образом влияет на результаты присваивания переменных

$var4 = 123;

function fn1($p1)
{
    return array('p1' => 1, 'p2' => 2);
}

if ($var1 = fn1(1) AND $var4 == 123)
{
    print_r($var1);
}

if ($var2 = fn1(1) && $var4 == 123)
{
    print_r($var2);
}

if (($var3 = fn1(1)) && $var4 == 123)
{
    print_r($var3);
}
Если вы запустите этот простой скрипт, он выдаст странные результаты, по крайней мере для меня !! Первый вывод first, если выражение приведет к массиву, возвращенному из функции и назначенному переменной $ var1, чего я и ожидаю, хорошо?Второй вывод from second, если выражение приведет к целому числу '1', присвоенному переменной $ var2, что вообще НЕ ожидается !! Обратите внимание, что единственная измененная вещь - это логический оператор, я использовал '&&' вместо 'AND', вот и все !!Третий вывод из третьего выражения if снова приведет к ожидаемому массиву, возвращенному функцией и назначенному переменной $ var3, точно так же, как первое выражение if, но подождите: я только что принял оператор присваивания в выражении if в скобках, в то время как все еще используя второй код выражения if!

Кто-нибудь может объяснить технически - в деталях - почему это странное поведение? Будут оценены ссылки на php.net.

Я знаю, что «&&» имеет более высокий приоритет, чем «И», но это мне не объясняет !!

Ответы на вопрос(3)

Ваш ответ на вопрос