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