В чем разница между ++ $ i и $ i ++ в PHP? - PullRequest
68 голосов
/ 18 ноября 2009

В чем разница между ++$i и $i++ в PHP?

Ответы [ 14 ]

1 голос
/ 18 ноября 2009

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

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

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

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

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

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

1 голос
/ 18 ноября 2009

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

постинкремент:

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

Преинкремент:

$zero = 0;
$n = ++$zero; //$n is one
0 голосов
/ 30 мая 2019

Оба оператора по-прежнему делают то, что подразумевает их синтаксис: увеличивать. Независимо от префикса или постфикса, переменная обязательно увеличивается на 1. Разница между ними заключается в их возвращаемых значениях.

1. Приращение префикса возвращает значение переменной после ее увеличения.

2. С другой стороны, наиболее часто используемый постфиксный инкремент возвращает значение переменной до ее увеличения.

// Prefix increment

let prefix = 1;
console.log(++prefix); // 2

console.log(prefix); // 2

// Postfix increment

let postfix = 1;

console.log(postfix++); // 1

console.log(postfix); // 2

Чтобы запомнить это правило , я думаю о синтаксисе двух. Когда кто-то набирает префикс приращения, он говорит ++ x. Позиция ++ здесь важна. Сказать ++ x означает сначала увеличить (++), а затем вернуть значение x, таким образом, мы имеем ++ x. Постфиксный инкремент работает наоборот. Сказать x ++ означает сначала вернуть значение x, а затем увеличить его (++) после, то есть x ++.

0 голосов
/ 26 марта 2014

Я запустил следующий код для проверки, если ++ $ i на 10% быстрее, чем $ i ++. Я признаю, что код не имеет стабильного результата, но даже тогда я должен был, по крайней мере, увидеть некоторые цифры около 10%. Максимум, который я получил, составлял примерно 4-4,5%.

<?php

$randomFloat = rand(0, 10) / 10;

$before1 = microtime(true);

for($i=0; $i <1000000; ++$i){
    $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10);
}

$after1 = microtime(true);
echo 'it took '.($after1-$before1) . ' seconds fot ++$i<br />';

$before2 = microtime(true);

for($i=0; $i <1000000; $i++){
    $rand = (rand(0, 10) / 10) * (rand(0, 10) / 10);
}

$after2 = microtime(true);
echo 'it took '.($after2-$before2) . ' seconds fot $i++<br /><br />';

echo '++$i is '.((($after1-$before1)*100)/($after2-$before2)-100).'% faster than $i++';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...