Почему оператор pre / post increment ведет себя неправильно?

Почему значения переменной в PHP не имеют последовательного поведения в следующем коде?

<?php $piece = 10; // output is 10 10 10 10 11 12 echo $piece . $piece . $piece . $piece++ . $piece . ++$piece; $piece = 10; // output is 10 10 10 11 12 echo $piece . $piece . $piece++ . $piece . ++$piece; $piece = 10; // output is 11 10 11 12 echo $piece . $piece++ . $piece . ++$piece; ?> 

Вопрос в том, почему первый результат в последнем примере равен 11? вместо 10, как он дает выше 2 примеров.

Solutions Collecting From Web of "Почему оператор pre / post increment ведет себя неправильно?"

С http://php.net/manual/en/language.operators.precedence.php :

Приоритет операторов и ассоциативность определяют только то, как сгруппированы выражения, они не определяют порядок оценки. PHP (в общем случае) не указывает, в каком порядке оценивается выражение, а код, который предполагает определенный порядок оценки, следует избегать, поскольку поведение может изменяться между версиями PHP или в зависимости от окружающего кода.

 <?php $a = 1; echo $a + $a++; // may print either 2 or 3 $i = 1; $array[$i] = $i++; // may set either index 1 or 2 ?> 

Другими словами, вы не можете полагаться на действие ++ в определенный момент времени относительно остальной части выражения.