首页 > 心得分享 > PHP中if($a==false)和if(!$a)哪种写法速度更快?

PHP中if($a==false)和if(!$a)哪种写法速度更快?

今天某Q群群主突然问了这么一个问题,并发起了一个投票。

从投票结果上看,多数人都认为 if(!$a) 速度更快。

但是当问道为什么这个速度快的时候,大多数人都沉默了。

其实,包括我也沉默了,因为我选 if(!$a) 速度快的原因是:

可以少写几个符号...

如果这题说的写代码速度的话,我估计这就算是结束了。

但是,我突然很想知道,特么到底是哪个运行效率更高。

虽然我猜想也应该是 if(!$a) ,但是程序并不会因为你认为怎样就怎样。

实践出真知,还是马上写了一堆代码,测试了一下,测试结果如图:

2016-11-10 14-05-37屏幕截图.png

其中,测试了三种不同的写法,每次运行一千万次为结果。

从图中看,显而易见,和我们预想的差不多。

确实是 if(!$a) 的效率更高一些。

而效率高的原因,我认为应该是这样:

if ( expr ) 中,是根据条件的 bool 值确定运行方向的。

而 if ( $a == false ) 中,实际上代码运行顺序是

if ( ( $a == false ) == true ) 这样的逻辑来处理的。

而 if ( !$a ) 中,运行代码是

if ( $a != true ) 这样的顺序来执行的。

所以 if(!$a) 实际上是少了一次转换运算,所以效率过略高一筹。

而 至于 为什么 if ( false == $a ) 的效率也比 if ( $a == false )高。

我认为是 因为不同的书写顺序 导致变量在转换类型时不同导致的效率问题。

可能 字符串 转 布尔值 比 布尔值 转 字符串 的效率更高。

也有可能是 字符串之间比较的效率 和 布尔值 之间比较的效率不同。

导致先后顺序不一致,效率也不一致。

当然,这些也只是猜测,我在php官方手册里面找了一圈,也没找到 这方面相关的说法。

所以没办法求证,至于看源代码这事,是我等渣渣可望不可即的事。

总之,事情最后还是有了结果的。

if ( !$a ) 效率最高
if ( false == $a ) 效率其次
if ( $a == false ) 效率更慢

但是,最后我想问一句,谁现在接触过的项目达到了千万次运算级别。

千万次运算,才节省了0.01秒左右的样子。

总时间也才0.3秒左右,所以为了节省这点效率而刻意改变写法意义并不是很大(前提是项目不大)。

但是 if(!$a) 从书写效率上,确实也要更快。

代码也更简洁,按照自己喜欢的风格来就好。

附上测试代码:http://git.oschina.net/im27786/codes/w1pmvtij6zs7uncx9k4d058

上一篇: Linux系统下SSH免密码快速登录到远程服务器

下一篇: 【原创】JS获取GET参数方法。