誰かがこれをなぜ説明できますか:
var_dump((bool) 1==2);
戻り値
bool(true)
だが
var_dump(1==2);
戻り値
bool(false)
もちろん、2番目の戻り値は正しいですが、なぜ最初の機会にphpが予期しない値を返すのですか?
実際には、見た目ほど奇妙ではありません。 (bool)
は==
よりも優先順位が高いため、次のようにします。
var_dump((bool) 1==2);
これと同等です:
var_dump( ((bool) 1) == 2);
またはこれ:
var_dump(true == 2);
type juggling により、2
もbool
にキャストされます(これは「緩やかな比較」であるため) 、これはこれと同等です:
var_dump(true == true);
またはこれ:
var_dump(true);
最初の例では、比較の前にキャストが行われるためです。だからあなたが書いたかのようです
((bool) 1)==2
これは
true == 2
2
をtrue
に変換して比較し、最終的にtrue
を生成することで評価されます。
予想される結果を確認するには、順序を明示的にするために括弧を追加する必要があります。
var_dump((bool)(1==2));
私はこの方法を使用します:
!!0 (false)
!!1 (true)
次のようなコードを常に実行するため、ステートメント((bool)1 == 2)の記述方法は常にtrueを返します。
まず、実行されます
(bool)1
(bool)1はtrueを返します。
これで、2番目のステップで(bool)1が真になるため、ステートメントは次のようになります。
true ==2
2をブール型に型キャストすると、trueが返されるため、最終状態ではステートメントは次のようになります。
true == true
これは明らかにtrueを返します。私が投稿で1年前に説明したのと同じこと PHP Type casting も同様です。