web-dev-qa-db-ja.com

PHPで===よりも===が速いのはなぜですか?

PHPで=====より速いのはなぜですか?

162
coderex

等号演算子==はデータ型を一時的に変換するか、一時的にデータ型を変換して、他のオペランドと等しいかどうかを確認しますが、===(ID演算子)は変換を行う必要がないため、実行される作業が少なくなり、処理が高速になります。

193
meder omuraliev

===は型キャストを実行しないため、0 == '0'trueと評価されますが、0 === '0'-falseへ。

53
raveren

最初に、===は2つの引数が同じかどうかを確認しますtype-比較が実際に実行される前に、タイプチェックで数値1と文字列 '1'が失敗します。一方、==は最初に型をチェックせずに先に進み、両方の引数を同じ型に変換してから比較を行います。

したがって、===は、障害状態のチェックがより高速です。

24
iblamefish

考慮すべきことが2つあります。

  1. オペランドのタイプが異なる場合、==および===生成異なる結果。その場合、オペレーターの速度は重要ではありません。重要なのは、どちらが望ましい結果を生み出すかです。

  2. オペランドのタイプが同じ場合、==または===は両方とも同じ結果を生成します。その場合、両方の演算子の速度はほぼ同じです。これは、どちらの演算子でも型変換が実行されないためです。

私は次の速度を比較しました:

  • $a == $b vs $a === $b
  • ここで、$aおよび$bはランダムな整数でした[1、100]
  • 2つの変数が生成され、100万回比較されました
  • テストは10回実行されました

結果は次のとおりです。

 $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

速度がほぼ同じであることがわかります。

22
Salman A

かなり速いかどうかはわかりませんが、ほとんどの言語では===は直接型比較であり、==は必要に応じて/一致する可能性がある場合は型強制を試みます。

7
Chris

なぜなら===オペランドを同じ型に強制する必要はありません それらを比較する前に。

しかし、速度の違いは非常に大きいとは思いません。通常の状況では、より意味のある演算子を使用する必要があります。

4
John Carter

==は、比較前に型変換のオーバーヘッドが大きくなります。 ===最初に型をチェックしてから、型変換を行わずに続行します。

4
Martin

結論として、2つの変数が同じ値を持つかどうかを確認するためにデータ型を変換しないため、===の方が高速ですが、2つの変数が同じ値を持つかどうかを確認する必要がある場合は、= 、または===変数のタイプも重要な場合。

2
D.Martin

Fasterは、直接実行時間で測定するだけではありません(この場合、直接パフォーマンステストはほとんど無視できます)。そうは言っても、重要な累積的な違いがあるかどうかを実際に確認するには、反復または再帰を含むテストを見る必要があります(現実的なコンテキストで使用する場合)。 Edgeのケースを扱うときに節約するテストとデバッグの時間は、あなたにとっても有意義なはずです。

0