値のみを比較!==
しながら、変数の型を比較するためにも使用されることを私は知っています。!=
しかし、多くの人が!==
値を比較するときに使用していることがわかります。たとえば、次のようになります。
$stuff = 'foo';
if($stuff !== 'foo') // do...
彼らがこれを行う理由はありますか?または何!==
よりも速いですか?!=
値のみを比較!==
しながら、変数の型を比較するためにも使用されることを私は知っています。!=
しかし、多くの人が!==
値を比較するときに使用していることがわかります。たとえば、次のようになります。
$stuff = 'foo';
if($stuff !== 'foo') // do...
彼らがこれを行う理由はありますか?または何!==
よりも速いですか?!=
必要に応じて暗黙的な変換が含まれているため、!=
演算子は少し遅くなります。
while!==
は前の型を比較してから値を比較します (型が等しい場合のみ)
また、 2つのオペランドの違いに関する詳細については、この回答に従ってください
両方の変数が同じ型であることが事前にわかっている場合、違いはありません。速度の違いはごくわずかであるため、速度の引数を完全に無視することができ (また無視する必要があります)、時期尚早の (そして不必要な) 最適化に集中するのではなく、アプリケーションに集中する必要があると思います。
ただし、 and 引数が期待どおりである必要がある場合 (たとえば、等価テストに合格し=== false
たくない場合) は、 orを使用します。0
===
!==
Headshota が述べたように、オブジェクトを操作している場合、===
は 2 つの変数が実際に同じオブジェクト インスタンスを指していることを確認します==
が、値によってそれらを一致させようとするため、予期しない結果が生じる可能性があり、細心の注意を払って使用する必要があります。ここでは、アプリケーションにとって何らかの意味があるため、厳密な演算子が使用されます。
あなたの質問に答えるために、あなたの特定のコンテキストで何人かの人々が使用している場合、===
または!==
両方の変数が同じ(スカラー)タイプであることを知っている場合、それはコーディングスタイルの問題であり、コードで、両方の変数が同じ型であるという考えを強制しますが、おそらくパフォーマンスは考慮されていません。
厳密な演算子は、パフォーマンスの最適化としてではなく、そうする必要がある場合に使用する必要があります。
更新:速度の議論に答えるために、この小さなベンチマークを考えてみましょう:
$a = "test";
$b = "test";
$t = microtime(true);
for ($i=0; $i<1e6; $i++) {
($a == $b);
// (100x the equality test, omitted for clarity purposes,
// to lower the speed impact of the loop itself)
($a == $b);
}
printf('%.3f', microtime(true)-$t);
私は大まかに得ます:
6.6 seconds for ==
4.3 seconds for ===
$b = 1;
暗黙の変換を強制するために使用すると、おおよそ次のようになります。
4.4 seconds for ==
2.4 seconds for ===
これは、両方のケースで約 2 秒の増加を意味します。これは、厳密な比較演算子の速度の利点を示していると考えるかもしれません。しかし、ここで話しているのは1e6 * 100
= 1 億回の反復であることを忘れないでください。
つまり、厳密な比較を 1 回行うだけで、スクリプトが .1 倍速くなります0.00000002 seconds
。
スクリプトを作成するときにこれを考慮する必要があると思われる場合は、そうしてください。しかし、すぐに、この 1000 倍の速度向上を実現する他の小さな最適化に遭遇し、そのような「最適化」が役に立たないように見えます。これは時期尚早の最適化の教科書的なケースです。
繰り返しますが、必要に応じて厳密な比較演算子を使用してください。これはコードの要件であるためです。パフォーマンス上の理由から使用しないでください。
実際には、!== は変数の型を比較するために使用されるのではなく、比較される値が同じ型であり、同じ値を持つことを保証するために使用されます。
だからあなたが持っているなら
$i = "0";
$i == 0
は true を返しますが、$i === 0
false を返します。
あなたが持っている場合
$j = 0;
$j == null
は true を返しますが、$j === null
false を返します。
タイプが同じであることがわかっている場合、実際には高速ではありません。これは、例の場合です。人々が使用する主な理由!==
は、PHP が型ジャグリングの魔法を実行しないようにするためです。そのため、比較が望ましくないことを意味する可能性が低くなります。
For example
$flag = 0;
if($flag == false ){
echo "true";
}else{
echo "false";
} // echo true;
$flag = 0;
if($flag === false ){
echo "true";
}else{
echo "false";
} // echo false;
$flag = false;
if($flag === false ){
echo "true";
}else{
echo "false";
} // echo true
一般に、同一性をチェックするよりも同一性をチェックする方が安全です。これにより、無効な型によって引き起こされる多くのエラーを回避できます。ただし、ID が必須ではない場合もあるため、この場合は等価を使用できます。