PHPでは、二重等号(==)を使用する特別な理由がない限り、二重等号(==)の代わりに三重等号比較演算子(===)を使用する必要がありますか?


ベストアンサー

もちろんです!

PHP、Javascript、または緩い等価性チェックと厳密な等価性チェックの両方を提供するその他の言語では、やむを得ない理由がない限り、厳密なバージョンを使用することをお勧めします。 。 (実際、一部のソフトウェア開発者は、緩い等価性チェックをまったく使用しないと主張しています!)これにはいくつかの理由があります。

まず、緩い等価性を使用すると、クラス全体の欠陥が発生する可能性があります。これは厳密な同等性で回避できます。 PHPは「役立つ」ことで特に有名ですが、動的型付けを使用するほとんどの言語は、型間の変換に関して寛容です。緩い同等性を通過するデータは、多くの場合問題なく動作し、エラーをトリガーしたり予期しない副作用を引き起こしたりする前に、コードの奥深くまで入り込む可能性があります。一方、厳密な等価性チェックは、静的に型付けされた言語で発生するチェックのタイプに似ています。間違った形式のデータが暴走する可能性ははるかに低くなります。

関連する問題は、同等性が緩いためにコードの推論が難しくなることです。厳密な同等性を使用すると、チェックに合格したデータについて多くの仮定を立てることができます。緩い等価性を使用する場合、同じことは当てはまりません。次の2つの例を検討してください。

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

最初の例では、「doThing」関数が数値で呼び出されていると想定でき、その関数が数値をどのように処理するかを考慮するだけで済みます。

ただし、2番目の例では、「doThing」は文字列やブール値などのさまざまなタイプで呼び出される可能性があります。 「doThing」関数を読みながら、暗黙的な型変換に関するさまざまな(場合によっては無意味な)ルールをすべて含めて、各型がどのように処理されるかを検討する必要があります。それは頭の中で追跡することがたくさんあります!

また、緩い同等性を使用することにより、明示的ではありません。これは、ロジックを介した推論の難しさに寄与するだけでなく、ロジックが表すことになっている実際の要件をキャプチャすることもできません。上記の例2では、​​元のプログラマーが数値、文字列値、ブール値、またはそれらの組み合わせを予期していたかどうかを判断する方法はありません。コードを維持するのが面倒になります。

最後に、暗黙的な型キャストは便利ですが、専門的な設定ではほとんど必要ありません。いつでも適切なデフォルトを設定するか、データを適切なタイプに手動で強制変換できます。これには、より多くのコードと労力が必要になる場合がありますが、コードの信頼性も大幅に向上します。

回答

2つの値が同じタイプである必要があることがわかっている場合は、Strict( ===)緩い(==)以上。 Strictは、looseのように型変換を行う必要がないため、パフォーマンスが向上します。

たとえば、1 == “1”は、文字列が等しいかどうかを確認するために数値に変換されるため、trueを返します。

1 === “1”はfalseを返します

厳密な等式はほとんど同じタイプではありませんか? FALSE “

これがお役に立てば幸いです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です