PHP中的++$i
和$i++
有什么区别?
回答
++$i
是预增量,而$i++
后增量。
- 预增量:首先增量变量
i
然后解除引用。 - 后增量:去参考,然后递增
i
“拿的事实,即PHP 允许您张贴增量($ I ++) 和预增(++ $优势i)。意思 是一样的,只要你不是 写什么都像$ j = $ i ++, 然而预先递增几乎是10% 更快,这意味着你应该 从post-当你有机会时,增加 , 特别是在紧密的循环中,尤其是如果你对于微观优化的 迂腐! - TuxRadar
对于进一步澄清,-递增后在PHP已被记录为存储哪些属性此10%的开销相对于预增量的临时变量。
++$i //first increment $i then run line
$i++ //first run line then increment $i
这在技术上是过于简单化 - 想到for循环等。 – 2009-11-18 13:50:12
为了解释jldupont的观点:
$i = 1;
$x = $i++;
echo $x; // prints 1
$x = ++$i;
echo $x; // prints 3
差异是:++$i
将增加$i
变量并返回更新后的值,而$i++
将返回原来的价值,所以加一。
$prefix = 1;
$postfix = 1;
echo ++$prefix; // 2
echo $postfix++; // 1
它可能是最好的例子说明...
后递增:
$zero = 0;
$n = $zero++; //$n is zero
预增量:
$zero = 0;
$n = ++$zero; //$n is one
++$i
是预增量
$i
递增- 的新值被返回
$i++
是-递增后
- 的
$i
拷贝到内部临时变量 $i
递增- 旧的内部拷贝的值返回
$i
的值
++$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;
简短的回答:
- 前缀增加值,并返回值增加
- Postfix增加该值,并在增加值之前返回该值
- 前缀更快
龙答:如果你想想看一点点,你会如何实现这些你自己,你可能会意识到为什么前缀更快。
const T T::operator ++ (int) // postfix
{
T orig(*this);
++(*this); // call prefix operator
return (orig);
}
避免后缀,除非你有特殊原因不能到:使用前缀真相被告知,后缀实际上是(常)实施。对于复杂的数据类型,速度差异可能相当大。
我实际上在几天前看了这个。Heres my source.
查看前后递增的另一种方法是它是组合2个语句的简写。
预递增递增后
// long form
$x = $y; // any statement using $y
$y = $y + 1;
// shorthand
$x = $y++; // the same statement using $y
// long form
$y = $y + 1;
$x = $y; // any statement using $y
// shorthand
$x = ++$y; // the same statement using $y
是没有区别的:
for($i = 0;$i<3;++$i)var_dump $i;
/*
int(0)
int(1)
int(2)
*/
for($i = 0;$i<3;$i++)var_dump $i;
/*
int(0)
int(1)
int(2)
*/
但:
for($i = 0;$i<3; $j = ++$i)var_dump($j);
/*
NULL
int(1)
int(2)
*/
for($i = 0;$i<3; $j = $i++)var_dump($j);
/*
NULL
int(0)
int(1)
*/
这很有用,前缀增量似乎没有什么意外。我现在要切换到始终使用前缀增量。 – CMCDragonkai 2015-06-26 13:24:47
我运行下面的代码来测试++ $ i是否比$ i ++快10%。我承认,代码没有稳定的结果,但即使如此,我至少应该看到接近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++';
定位后增量运算符的主要目的是,像这样的:
while(*condition*)
$array[$i++] = $something;
这是一个非常优雅的方式,如何让周围的一些阵列的迭代。 击穿:
- 变量$东西将被分配到与$ I 索引的数组元素
- 变量$我将递增
- 迭代是在端部,条件将被检查
在所有其他情况下,您应该使用前缀运算符。它使代码更加清晰(您可以确定,您已经使用了特定变量的递增值)。
Upvoted推荐使用前缀,除非后缀是严格需要的。 – developerbmw 2016-05-14 20:36:00
这个例子elplains只是
<?php
$x = 10;
echo $x++. ' '.$x; // the result is 10 and 11
echo "<br>";
$y = 10;
echo ++$y. ' ' .$y; // the result is 11 and 11
// so the $x++ is not showing +1 at first but the next time
// and the ++y is showing +1 first time but not increasing next
?>
感谢这个简单的例子。我现在知道了。 – Praditha 2018-01-12 07:06:04
- 1. i ++和++ i有什么区别?
- 2. phpinfo();有什么区别?和php -i?
- 3. makefile中-I和-L有什么区别?
- 4. ++ i和i ++在JavaScript中有什么区别
- 5. C中i--和i-1有什么区别?
- 6. printf(“%d”,i ++)和i ++之间有什么区别;的printf( “%d”,i)的?
- 7. ++ i和i + 1在javascript中的区别是什么
- 8. for循环(Java)中的i ++&++ i有什么区别?
- 9. virtio,emulated-IO,direct I/O,I/O passthrough,SR-IOV有什么区别?
- 10. Javascript:Forloop i ++和(i + 1)之间的区别
- 11. R中的x^2和I(x^2)有什么区别?
- 12. C中的%i,%d和%D有什么区别? (printf)
- 13. JSP中的<%和<%i有什么区别?
- 14. 就原子性而言,i ++和i = i + 1之间的区别
- 15. USB标准中语法I(0,1)和I(1,0)之间的区别是什么?
- 16. 时钟和I/O中断有什么区别?
- 17. 工作线程和I/O线程有什么区别?
- 18. QueryParser和API之间有什么区别?
- 19. DMA控制器和I/O处理器有什么区别
- 20. `sed -i -e`和`sed -ie`有什么区别?
- 21. I/O端口和I/O内存之间的区别
- 22. 将i和i传递给函数的区别
- 23. int p = *(int *)i和int p = *(int *)&i之间的区别
- 24. i-vector和d-vector之间的区别
- 25. 在JavaScript中,“i = + i”是什么意思?
- 26. out [i] = *(a_mat + i)在C中做什么?
- 27. 在MATLAB中使用(j,i)与(i,j)之间的区别
- 28. 为什么对于(int i = 0; i <10; ++ i)和for(int i = 0; i <10; i ++)返回相同?
- 29. 正则表达式中的`?i`和`?-i`是什么意思?
- 30. PHP中的 - >和::有什么区别?
我在你的报价来源很感兴趣。 10%对我来说似乎很重要 – knittl 2009-11-18 13:41:22
这是一个一般的经验法则,还是PHP的具体规定。 – Zoidberg 2009-11-18 13:42:40
...源在我的答案中列出。我没有检查过自己...我想我可以通过查看PHP的源代码,但... – jldupont 2009-11-18 13:43:07