Почему значения переменной в 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 примеров.
С 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 ?>
Другими словами, вы не можете полагаться на действие ++
в определенный момент времени относительно остальной части выражения.