我正在阅读一本关于运营商的PHP书籍。
这本书说if(!$a == $b)
比if($a != $b)
快。{
这是真的吗?
我用MS尝试了这个但没有结果。你觉得怎么样?
修改
if($a != $b)
比if(!$a == $b)
答案 0 :(得分:10)
这似乎是一个悖论,但这些陈述并不等同:
$a = '0';
$b = null;
var_dump(!$a == $b); // false
var_dump($a != $b); // true
...因为非传递型强制。因此,谈论速度在这里没有任何意义。
更新:也许这也应该解释一下。 )第一次比较将评估为......
(!'0') == null;
换句话说,首先'0'
将转换为boolean
(结果为false
;请注意与JavaScript的区别)。当然,!false
评估为true
- 在任何语言中都不等于null
(但实际上 null
也会转换为布尔值,只有这些值才会被比较)。
在第二次比较中,'0'
(字符串)与null
进行比较 - 突然规则为changed。 null
转换为空字符串(!),这个空字符串实际上将与'0'
进行比较。毋庸置疑,这些也不相同。
最重要的是,在使用比较运算符提高速度时应该非常小心。它可能会导致非常微妙 - 并且跟踪错误非常不同。
答案 1 :(得分:2)
编辑:不,经过几次似乎没有任何区别:
http://sandbox.onlinephpfunctions.com/code/09c03d21b5dfe626d6a5c4791b94ac49e2d4fa1a
点击执行几次,没有区别。
首次测试:0.075621128082275 第二次测试:0.080623149871826
平均减少约0.005秒,有一百万次迭代。
答案 2 :(得分:2)
超过1,000,000次迭代,我发现if( $a != $b)
比if( !$a == $b)
慢约40%,但是这个差异只有0.04纳秒,并且它们不等同。
$a = "123";
$b = 456;
var_dump(
$a != $b, // true
!$a == $b // false
);