&&
имеет более высокий приоритет, чем =
, поэтому то, что действительно происходит, выглядит примерно так:
if ($var1 = (fn(1) && $var4 == 123))
Итак, что на самом деле присваивается переменной $ var1, это логический результат, поэтому вы получаете 1.