0

我正在阅读一本关于运算符的 PHP 书籍。

书上说这样if(!$a == $b)更快if($a != $b)
这是真的?

我用 MS 试过这个,但没有结果。你怎么看?

编辑: if($a != $b)然后更快if(!$a == $b)

4

3 回答 3

10

这似乎是一个悖论,但这些陈述并不等同:

$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'. 不用说,这些也不相等。

最重要的是,在摆弄比较运算符以提高速度时,您应该非常小心。它可能会导致非常微妙的 - 并且跟踪非常不同的 - 错误。

于 2012-09-19T19:21:06.453 回答
2

编辑:不,几次之后似乎根本没有区别:

http://sandbox.onlinephpfunctions.com/code/09c03d21b5dfe626d6a5c4791b94ac49e2d4fa1a

点击执行几次,没有区别。

第一次测试:0.075621128082275 第二次测试:0.080623149871826

一百万次迭代平均慢约 0.005 秒。

于 2012-09-19T19:23:55.083 回答
2

超过 1,000,000 次迭代,我发现它if( $a != $b)比 慢了大约 40% if( !$a == $b),但是这个差异只有大约 0.04 纳秒,而且它们并不相等。

$a = "123";
$b = 456;
var_dump(
    $a != $b, // true
    !$a == $b // false
);
于 2012-09-19T19:24:57.897 回答