3

たとえば、次のように使用していることを知っています。

if (in_array('...'), array('.', '..', '...') === true)

以上:

if (in_array('...'), array('.', '..', '...') == true)

パフォーマンスを向上させ、いくつかの一般的な間違い(1 == trueなど)を回避できますが、次のような文字列に対して厳密な比較を使用する理由があるかどうか疑問に思っています。

if ('...' === '...')

次とまったく同じことをしているようです:

if ('...' == '...')

誰かがこの主題にいくらかの光をもたらすことができれば、私はそれを感謝します。

4

2 に答える 2

8

両方の値が文字列であることが保証されていることがわかっている場合、2つの間の唯一の違いは、有効な値だけでなく、タイプが同じかどうかを確認することであるため、==とは同一です。======

ただし、場合によっては、値が文字列になるかどうかわからないことがあります。たとえば、$_GET変数や$_POST変数などです。次のことを考慮してください。

$_GET['foo'] == ""

上記の式はfoo、空白の文字列として渡された場合はtrueと評価されますが、値がまったく渡されなかった場合もtrueと評価されfooます。対照的に、

$_GET['foo'] === ""

空白の文字列が明示的に渡された場合にのみtrueと評価されます。そうでない場合、の値は$_GET['foo']空白の文字列と同等である可能性がありますが、実際には文字列ではなくそのインデックスの空の値であるため、型はそうではありません。

于 2009-08-15T11:16:51.143 に答える
3

どちらか一方を使用できる場合は、次の理由から厳密な比較を選択してください。

  1. パフォーマンスが向上します
  2. 予期しない結果を防ぎます

文字列を比較する場合、文字列が空であるか、文字列であると思われる変数が実際にはそうではないため、予期しない結果が生じる可能性があります。

2つの文字列リテラルの比較は常にTRUEまたはFALSEに減らすことができるため、使用することはありません。例えば:

if ('...' === '...')

と同じです

if (TRUE)

したがって、常に少なくとも1つの変数を比較するため、予期しない結果が生じる可能性があると想定する必要があります。

http://net-beta.net/ubench/で、さまざまな厳密な比較と緩い比較のベンチマーク結果を確認できます。私も自分のテストを実行し、同じ結果を見つけました。

これはマイクロ最適化です。つまり、目立った違いはないため、既存のコードを変更しないでください。ただし、新しいコードを作成する場合は、最も効率的な手法を使用して練習することをお勧めします。

于 2012-12-05T00:37:15.650 に答える