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は(結果は; JavaScript との違いに注意してください)'0'に変換されます。もちろん、 -と評価されますが、これはどの言語でも等しいとは言えません (ただし、実際にはブール値にも変換され、これらの値が比較されます)。booleanfalse!falsetruenull null

2 番目の比較'0'(文字列) はnull- と比較され、突然ルールが変更されます。nullは空の文字列 (!) に変換され、この空の文字列が実際に と比較され'0'ます。言うまでもなく、これらも等しくありません。

肝心なのは、速度のために比較演算子をいじるときは非常に注意する必要があるということです。非常に微妙な、そして追跡するのとは非常に異なるバグを引き起こす可能性があります。

于 2012-09-19T19:21:06.453 に答える
2

if( $a != $b)1,000,000回を超える反復では、それはよりも約40%遅いことがわかりましたがif( !$a == $b)、この差は約0.04ナノ秒にすぎず、同等ではありません。

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

編集:いいえ、数回後にはまったく違いがないようです:

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

実行を数回クリックしますが、違いはありません。

最初のテスト: 0.075621128082275 2 番目のテスト: 0.080623149871826

100 万回の反復で平均して約 0.005 秒遅くなります。

于 2012-09-19T19:23:55.083 に答える