未定義の動作を利用すると、常に発生します。そして、あなたがしていることは未定義の動作です。したがって、未定義はその反対であるため、決定論的論理に従う説明を得ようとしないでください。
PHPマニュアルの状態:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
コメントで質問を拡張しました:
echo $c=($b++) - (++$b);
このステートメントの結果も -2 になります。未定義の動作とはどういう意味ですか?
$b = 0 and it shall:
$c=($b++) - (++$b); | $b is 0 - process first brackets
$c= 0 - (++$b); | $b is 1 - process second bracktes inner operator
$c= 0 - ($b); | $b is 2 - process second brackets
$c= 0 - 2; | calculate
$c= -2;
これは明らかに、コードを実行したときの結果です。これが常にそのように計算されるとは定義されていないため、未定義です。たとえば、2 番目の括弧が最初に処理されると、異なる結果が得られます。