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

Php “!$a==$b”比“$a!=$b”快吗?,php,operators,Php,Operators,我在读一本关于操作符的PHP书 书上说如果$a==$b比$a快!=$B 这是真的吗 我用MS试过,但没有结果。你觉得怎么样 编辑: 如果$a!=$b比if快$a==$b这似乎是一个悖论,但这些说法并不等同: $a = '0'; $b = null; var_dump(!$a == $b); // false var_dump($a != $b); // true 。。。因为非传递类型强制。因此,在这里谈论速度没有任何意义 更新:也许这也应该解释一下。第一次比较将评估为 (!'0') == n

我在读一本关于操作符的PHP书

书上说如果$a==$b比$a快!=$B 这是真的吗

我用MS试过,但没有结果。你觉得怎么样

编辑:
如果$a!=$b比if快$a==$b

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

$a = '0';
$b = null;

var_dump(!$a == $b); // false
var_dump($a != $b); // true
。。。因为非传递类型强制。因此,在这里谈论速度没有任何意义

更新:也许这也应该解释一下。第一次比较将评估为

(!'0') == null;
换句话说,第一个“0”将转换为布尔值,结果为false;请注意与JavaScript的区别。和当然,false的计算结果为true,-在任何语言中都不能等于null,但事实上null也被转换为boolean,只有这样才会比较这些值

在第二次比较“0”中,字符串与null进行比较,然后突然之间规则被删除。null被转换为空字符串!,这个空字符串将实际与“0”进行比较。不用说,它们也不相等


最重要的一点是,在处理速度比较运算符时,应该非常小心。它可能会导致非常细微的错误,而且跟踪错误的方式也非常不同。

编辑:不,几次之后,它似乎没有任何区别:

单击执行几次,没有区别

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


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

超过1000000次迭代,我发现如果$a!=$b比if慢40%左右$a==$b,但是这个差值只有约0.04纳秒,它们并不相等

$a = "123";
$b = 456;
var_dump(
    $a != $b, // true
    !$a == $b // false
);

你在读哪本书?我可以肯定地说,那快于!=-也许这就是书中给出的例子?任何基本类型的速度差,如果有的话,都是以纳秒为单位的。如果编译器未进行优化,!=应该更快,因为!==是两次手术$a或$a因为我有一种唠叨的感觉,你贴的那本瑞典书有漏洞?为什么不给它命名?@hazard:老实说,如果这是一本书,而你在互联网上找不到它,那就意味着它是如此不受欢迎和未知,以至于你真的不应该相信它。任何人都可以打印自己的书,但这并不能使内容可信。!运算符的优先级高于==显然它们不是相同的EHMM。为什么第一个接线员是假的?@HernanVelasquez,我说的是相反的吗?对于大多数数据,这个例子确实有效,因为,好吧!true==false与true相同!=错。@hazard因为0'的计算结果为true,而布尔'0'的计算结果为false否您没有这样做。你的欣赏是对的,我的意思是:取决于你想如何看待它。第一次测试:0.0058829784393311第二次测试:0.0055069923400879我得到了这个结果。在我的例子中,它总是很慢,我们能比较什么其他不相似的东西呢?啊,这里你有一个类型转换,可能也在进行中,这使问题变得相当复杂。