Это поведение можно подтвердить, проверив, как PHP компилирует ваш скрипт, например:
$a = 0;
echo $a + ++$a;
Компилирует в следующие коды операций, которые затем выполняются:
compiled vars: !0 = $a
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > ASSIGN !0, 0
1 PRE_INC $1 !0
2 ADD ~2 !0, $1
3 ECHO ~2
4 > RETURN null
Это переводитк следующему эквивалентному сценарию:
$a = 0; // ASSIGN
$tmp = ++$a; // PRE_INC
echo $a + $tmp; // ADD, ECHO
Заключение
К тому времени, когда $a
оценивается как левое выражение $a + (++$a)
, оно уже былоувеличен, потому что ++$a
был оценен первым.
Очевидно, что на это поведение не следует полагаться ;на любом языке по этому вопросу.