非常に簡単なガイドラインと仕様のバグがあり、混乱を招く可能性があります。
厳密な比較では、データ型と値が等しいかどうかがチェックされます。緩やかな比較では、値のみが等しいかどうかがチェックされます。
オブジェクト (比較表の一部ではない) の場合、PHP は非常に単純です。オブジェクトが他のインスタンスと同じインスタンスである場合、厳密に等しいか、そうでない場合は緩やかに等しいかを判断します。
したがって、0 と "0" は大まかに互いに等しく、false (および任意の文字列) に等しくなります。後者は、すべての文字列が数値ではないため、false であり、false に等しい数値は 0 であるため、すべての文字列は 0 に等しいと理解できます。
null と array() の比較はより複雑です。array() で作成された配列をチェックして、それを大まかに厳密に比較すると、true が返されます。ただし、is_null でチェックすると、false が返されます。array() で作成された array() は null である '' と等しくないため、後者の方がより論理的だと思います。関数 is_null() とチェック == null または === null の間のこの機能的な不一致はバグだと思います。値をチェックするために 2 つの異なる有効なメソッドを使用して異なる結果が返されることは起こらないはずだからです。Null は、関数 is_array() によると配列でもありません。これは true です。空の配列は、関数 is_array() による配列であり、これも真である必要があります。したがって、null が array() と等しいということは絶対にあってはなりません。