Может ли кто-нибудь объяснить, почему эти 2 дают одинаковый результат?
$a = 1; $c = $a + $a++; var_dump($c);//int(3)
а также
$a = 1; $c = $a + $a + $a++; var_dump($c);//int(3)
Протестировано в PHP 7.1. Пересмотренные дампы Opcode для обоих случаев, но все же не могут получить смысл. Если мы добавим еще $ a vars к выражению, это приведет к ожидаемому результату.
От PHP: Приоритет оператора :
Приоритет операторов и ассоциативность определяют только то, как сгруппированы выражения, они не определяют порядок оценки. PHP (в общем случае) не указывает, в каком порядке оценивается выражение, а код, который предполагает определенный порядок оценки, следует избегать, поскольку поведение может изменяться между версиями PHP или в зависимости от окружающего кода.
Пример №2 Неопределенный порядок оценки
$a = 1; echo $a + $a++; // may print either 2 or 3 $i = 1; $array[$i] = $i++; // may set either index 1 or 2
Итак, в вашем первом примере PHP явно возвращает 1
для $a++
затем увеличивая его до 2
а затем добавляя новый $a
, который равен 2
.
Во втором примере PHP возвращает 1
для $a
затем добавляет $a
затем добавляет $a
а затем увеличивает его на 2
.
Как можно видеть здесь: https://3v4l.org/kvrTr :
PHP 5.1.0 – 7.1.0
int(3) int(3)
PHP 4.3.0 – 5.0.5
int(2) int(3)