PHPで===
が==
より速いのはなぜですか?
等号演算子==
はデータ型を一時的に変換するか、一時的にデータ型を変換して、他のオペランドと等しいかどうかを確認しますが、===
(ID演算子)は変換を行う必要がないため、実行される作業が少なくなり、処理が高速になります。
===
は型キャストを実行しないため、0 == '0'
はtrue
と評価されますが、0 === '0'
-false
へ。
最初に、===は2つの引数が同じかどうかを確認しますtype-比較が実際に実行される前に、タイプチェックで数値1と文字列 '1'が失敗します。一方、==は最初に型をチェックせずに先に進み、両方の引数を同じ型に変換してから比較を行います。
したがって、===は、障害状態のチェックがより高速です。
考慮すべきことが2つあります。
オペランドのタイプが異なる場合、==
および===
生成異なる結果。その場合、オペレーターの速度は重要ではありません。重要なのは、どちらが望ましい結果を生み出すかです。
オペランドのタイプが同じ場合、==
または===
は両方とも同じ結果を生成します。その場合、両方の演算子の速度はほぼ同じです。これは、どちらの演算子でも型変換が実行されないためです。
私は次の速度を比較しました:
$a == $b
vs $a === $b
$a
および$b
はランダムな整数でした[1、100]結果は次のとおりです。
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
速度がほぼ同じであることがわかります。
かなり速いかどうかはわかりませんが、ほとんどの言語では===は直接型比較であり、==は必要に応じて/一致する可能性がある場合は型強制を試みます。
なぜなら===
オペランドを同じ型に強制する必要はありません それらを比較する前に。
しかし、速度の違いは非常に大きいとは思いません。通常の状況では、より意味のある演算子を使用する必要があります。
==は、比較前に型変換のオーバーヘッドが大きくなります。 ===最初に型をチェックしてから、型変換を行わずに続行します。
結論として、2つの変数が同じ値を持つかどうかを確認するためにデータ型を変換しないため、===の方が高速ですが、2つの変数が同じ値を持つかどうかを確認する必要がある場合は、= 、または===変数のタイプも重要な場合。
Fasterは、直接実行時間で測定するだけではありません(この場合、直接パフォーマンステストはほとんど無視できます)。そうは言っても、重要な累積的な違いがあるかどうかを実際に確認するには、反復または再帰を含むテストを見る必要があります(現実的なコンテキストで使用する場合)。 Edgeのケースを扱うときに節約するテストとデバッグの時間は、あなたにとっても有意義なはずです。