web-dev-qa-db-ja.com

ブール型への型キャスト

誰かがこれをなぜ説明できますか:

var_dump((bool) 1==2);

戻り値

bool(true)

だが

var_dump(1==2);

戻り値

bool(false)

もちろん、2番目の戻り値は正しいですが、なぜ最初の機会にphpが予期しない値を返すのですか?

45
Paris Liakos

実際には、見た目ほど奇妙ではありません。 (bool)== よりも優先順位が高いため、次のようにします。

var_dump((bool) 1==2);

これと同等です:

var_dump(  ((bool) 1)   == 2);

またはこれ:

var_dump(true == 2);

type juggling により、2boolにキャストされます(これは「緩やかな比較」であるため) 、これはこれと同等です:

var_dump(true == true);

またはこれ:

var_dump(true);
88
ruakh

最初の例では、比較の前にキャストが行われるためです。だからあなたが書いたかのようです

((bool) 1)==2

これは

true == 2

2trueに変換して比較し、最終的にtrueを生成することで評価されます。

予想される結果を確認するには、順序を明示的にするために括弧を追加する必要があります。

var_dump((bool)(1==2));

実際の動作を参照.

20
Jon

私はこの方法を使用します:

!!0 (false)
!!1 (true)
7
user2678106

次のようなコードを常に実行するため、ステートメント((bool)1 == 2)の記述方法は常にtrueを返します。

まず、実行されます

(bool)1

(bool)1はtrueを返します。

これで、2番目のステップで(bool)1が真になるため、ステートメントは次のようになります。

true ==2

2をブール型に型キャストすると、trueが返されるため、最終状態ではステートメントは次のようになります。

true == true

これは明らかにtrueを返します。私が投稿で1年前に説明したのと同じこと PHP Type casting も同様です。

0