Оператор увеличения PHP

Может быть дубликат, но я так и не нашел ответа. Я провел несколько основных тестов с оператором увеличения:

   $i = 42;
   $i > ++$i; # false
   $i > $i++; # true

Если первое сравнение имеет смысл для меня, возвращая false, я не могу понять, почему второе возвращает true.

Даже если это предварительное или последующее увеличение, я бы сказал, что оба они false. Как моя переменная может быть строго выше, чем ее собственное увеличенное значение?

Те же тесты с C и C++ показывают предупреждения, но говорят false для обоих сравнений.


person Bastien Thouverez    schedule 16.05.2021    source источник
comment
Вы предварительно увеличили $i до 43 в предыдущей команде, поэтому выражение оценивается как 43 > 43, что, естественно, дает false. Я полагаю, что дальше произойдет следующее: 1) PHP имеет выражение для вычисления с правой стороны, которое является постдекрементным, что означает, что $i сначала возвращается как 43, а затем увеличивается до 44; 2) $i теперь равно 44 и, таким образом, интерпретируется как таковое, что дает выражение 44 > 43. Я плохо разбираюсь во внутренностях PHP, но это единственный сценарий, который я могу себе представить. Может быть, кто-то более знающий сможет пролить свет на это.   -  person El_Vanja    schedule 17.05.2021
comment
Вы говорите, что компиляторы C и C++, которые вы пробовали, выдавали предупреждения; предупреждали ли они о неопределенном поведении? Потому что это то, что происходит в PHP: это не то, что одно выражение всегда дает false, а другое всегда true, а то, что оба могут произвольно изменяться между версиями или оптимизациями, потому что язык не гарантирует порядок операций. Связанный дубликат объясняет это более подробно.   -  person IMSoP    schedule 17.05.2021