“!$ a == $ b”比“$ a!= $ b”快吗?

时间:2012-09-19 19:14:30

标签: php operators

我正在阅读一本关于运营商的PHP书籍。

这本书说if(!$a == $b)if($a != $b)快。{ 这是真的吗?

我用MS尝试了这个但没有结果。你觉得怎么样?

修改 if($a != $b)if(!$a == $b)

3 个答案:

答案 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进行比较 - 突然规则为changednull转换为空字符串(!),这个空字符串实际上将与'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
);