Насколько они разные? Вот что я думаю, но я не уверен....
Если вы используете предварительное приращение, например, в цикле for с ++j, то вы, по сути, говорите: «Сделайте копию значения j для использования в цикле, затем увеличьте j, затем выполните операторы в цикл с копией j." Если вы используете пост-инкремент в том же цикле j++, то вы в основном говорите: «Сделайте копию значения j для использования в цикле, затем пройдите операторы в цикле с копией j, затем увеличивайте Дж."
Причина, по которой я не уверен, заключается в том, что я создал цикл for, который умножает значение j на 10, а затем выводит результат от j=1 до j=12, используя как постинкрементное, так и предварительное приращение. Человекочитаемый вывод точно такой же, как после и до инкремента. Я думаю: «Каким образом результаты будут одинаковыми, если не будет задействована какая-то операция копирования?»
Итак, я предполагаю, что разница между предварительным и последующим инкрементом действительно становится важной в php, когда я использую ссылки (которые действуют как указатели в php), а не имена для возвращаемых значений? Это может быть связано с тем, что копии ссылок не создаются, поэтому предварительное приращение будет выглядеть так: «Увеличить j, затем пройтись по операторам в цикле с измененным значением j, затем снова увеличить j...», тогда как после инкрементация будет выглядеть так: "Используйте значение j для операторов в цикле, затем измените значение j, затем пройдите цикл с новым значением j..."
zval*
. Указатель указывает на определенное место в памяти. В PHP такого нет, будь то 5.2 или 5.3. Однако есть ссылки, которые указывают на записи в дереве символов PHP, но вы все равно не можете заставить их указывать на место в памяти по вашему выбору. Итак, опять же, нет, ссылки не являются и не действуют как указатели. - person netcoder   schedule 22.06.2011