Каково различие между ++ $i и $i ++ в PHP?

Если Вы довольно довольны WebForms сегодня, то, возможно, ASP.NET MVC не для Вас.

я расстраивался WebForms в течение действительно долгого времени. Я являюсь определенно не одним здесь. Умный клиент, абстракция с сохранением информации по обрывам полотна вниз сильно в сложных сценариях. Я, оказывается, люблю HTML, JavaScript и CSS. WebForms пытается скрыть это от меня. Это также имеет некоторые действительно сложные решения проблем, которые являются действительно не тем комплексом. Веб-формы также по сути трудно протестировать, и в то время как можно использовать MVP, это не отличное решение для веб-среды... (по сравнению с MVC).

MVC обратится к Вам, если... - Вы захотите больше управления своим HTML - хотят бесшовный опыт ajax как любая платформа, имеет - хотят тестируемость до конца - хотят значимые URL - ОЧЕНЬ НЕ ХОТЯТ иметь дело с обратной передачей & проблемы состояния отображения

И что касается платформы, являющейся Предварительным просмотром 5, это довольно стабильно, дизайн главным образом там, и обновление не является трудным. Я запустил приложение на Предварительном просмотре 1 и обновил в течение нескольких часов после новейшего предварительного просмотра, являющегося доступным.

70
задан zzlalani 4 November 2013 в 05:55
поделиться

9 ответов

++ $ i является пре-инкрементом, а $ i ++ пост-инкрементом.

  • пре-инкремент: сначала инкрементная переменная i , а затем отмена ссылки.
  • пост-инкремент: отмените ссылку и затем увеличьте i

«Воспользуйтесь тем, что PHP позволяет выполнять пост-инкремент ($ i ++) и предварительное приращение (++ $ i). Значение то же самое, пока ты не написать что-нибудь вроде $ j = $ i ++, однако предварительное увеличение составляет почти 10% быстрее, а это значит, что вам следует переключиться с пост- на прединкрементное когда у тебя есть возможность, особенно в узких петлях и особенно если вы педантичны микрооптимизации! " - TuxRadar

Для дальнейшего пояснения, пост-инкремент в PHP был задокументирован как хранение временной переменной, которая атрибутирует эти 10% накладных расходов по сравнению с пре-инкрементом.

85
ответ дан 24 November 2019 в 13:13
поделиться

++ $ i предварительно инкрементно

  1. $ i увеличивается
  2. возвращается новое значение

$ i ++ пост -incrementation

  1. значение $ i , скопированное во внутреннюю временную переменную
  2. $ i , увеличивается
  3. внутренняя копия старого значения $ i ] возвращается
38
ответ дан 24 November 2019 в 13:13
поделиться
++$i //first increment $i then run line
$i++ //first run line then increment $i 
12
ответ дан 24 November 2019 в 13:13
поделиться

Разница : ++ $ i увеличивает переменную $ i и возвращает обновленное значение, а $ i ++ вернет исходное значение, поэтому увеличивайте его.

$prefix = 1;
$postfix = 1;
echo ++$prefix;   // 2
echo $postfix++;  // 1
4
ответ дан 24 November 2019 в 13:13
поделиться

Другой способ взглянуть на пре и последующее приращение - это сокращение для объединения двух операторов.

Предварительное приращение

// long form
$y = $y + 1;
$x = $y; // any statement using $y

// shorthand
$x = ++$y; // the same statement using $y

Пост-приращение

// long form
$x = $y; // any statement using $y
$y = $y + 1;

// shorthand
$x = $y++; // the same statement using $y
3
ответ дан 24 November 2019 в 13:13
поделиться

Чтобы объяснить точку зрения jldupont:

$i = 1;
$x = $i++;
echo $x; // prints 1
$x = ++$i;
echo $x; // prints 3
3
ответ дан 24 November 2019 в 13:13
поделиться

Это, вероятно, лучше всего проиллюстрировано на примере ...

Пост-инкремент:

$zero = 0;
$n = $zero++; //$n is zero

Предварительный инкремент:

$zero = 0;
$n = ++$zero; //$n is one
1
ответ дан 24 November 2019 в 13:13
поделиться

Краткий ответ:

  • Префикс увеличивает значение и возвращает увеличенное значение
  • Постфикс увеличивает значение и возвращает значение до того, как оно было увеличено
  • Префикс работает быстрее

Длинный ответ: Если вы немного задумаетесь, как бы вы реализовали их сами, вы, вероятно, поймете , почему префикс быстрее. По правде говоря, постфикс фактически (часто) реализуется с использованием префикса :

const T T::operator ++ (int) // postfix
    {
    T orig(*this);
    ++(*this); // call prefix operator
    return (orig);
    }

Избегайте постфикса, если у вас нет конкретной причины не делать этого. Разница в скорости может быть довольно значительной для сложных типов данных.

Я действительно искал это несколько дней назад. Вот мой источник.

1
ответ дан 24 November 2019 в 13:13
поделиться

++ $ i увеличивает $ i , но оценивает значение $ i + 1 $ i ++ приращение $ i , но возвращает старое значение $ i .

Вот пример:

$i = 10;
$a = $i++;
// Now $a is 10, and $i is 11

$i = 10;
$a = ++$i;
// Now $a is 11, and $i is 11

Иногда бывает небольшая предварительная стоимость использования $ i ++ . Видите ли, когда вы делаете что-то вроде

$a = $i++;

, вы действительно делаете это:

$temporary_variable = $i;
$i=$i+1;
$a=$temporary_variable;
54
ответ дан 24 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: