点击打开链接https://my.oschina.net/heiing/blog/123216
先来段代码
<?php
$loop = 10000;
$a = array();
$start_time = microtime(true);
for ($i = 0; $i < $loop; ++$i) {
$a[$i];
}
echo 'trigger notice: ', (microtime(true) - $start_time), "\r\n";
$start_time = microtime(true);
for ($i = 0; $i < $loop; ++$i) {
isset($a[$i]) && $a[$i];
}
echo 'trigger notice: ', (microtime(true) - $start_time), "\r\n";
再来看输出
trigger notice: 1.7045228481293
trigger notice: 0.0012819766998291
近两千倍的性能差异啊!
很多人对 notice 不以为然。代码里对时间放大了1W倍,如果在高并发的网站中,在循环中呢?
不过,这里也有就减少差异的方法,就是关闭错误提示:
error_reporting(0);
这时,差异减少到7倍左右
trigger notice: 0.035562992095947
trigger notice: 0.0042979717254639
使用错误抵制符 @ 也有助于减少差异,但效果没有 error_reporting(0) 好。
应当重视的是,良好的编码规范,使用 isset 测试元素是否存在,对于业务逻辑是有帮助的。