yambejp2021/10/29 03:38 編集型が違うものの比較は自動キャストするという認識でよいとおもいます $a=1; var_dump($a);//int $b=1.0; var_dump($b);//float var_dump($a==$b);//true var_dump($a===$b);//false なお表現上異なるものでも型と値が一緒なら厳密な比較でもtrueになります $a=1; var_dump($a);//int $b=0x1; var_dump($b);//int var_dump($a===$b);//true; $c=1.0; var_dump($c);//flaot $d=1e0; var_dump($d);//flaot var_dump($c===$d);//true;
退会済みユーザー2021/10/29 03:41> yambejp さん 文字列と数値の比較に関しては、8 系で大きな変更が入っています。 https://www.php.net/manual/ja/migration80.incompatible.php#migration80.incompatible.core.string-number-comparision var_dump((int)$a==$b);//true var_dump($a==(int)$b);//true にはならなくなりました。 > f.k さん https://www.php.net/manual/ja/language.operators.comparison.php の「さまざまな型の比較」を読むと良いです。 ただ、yambejp さんがいうように緩やかな比較を使わないのが混乱を避ける最も良い方法です。
f.k2021/10/29 03:49te2jiさん、yamabejpさん、ありがとうございました。非常に勉強になりました! 想定しない動きを避けるためにも、基本的には「===」の厳密比較で条件を記述したいと思います。 キャストについて知れたので、今後このような記述が出ても理解できるようになったと思います。 ありがとうございました。
f.k2021/10/29 03:16 編集ご回答ありがとうございます。 確認の為追加で質問させてください。 $bar = (int) 1; の場合、$bar はint型に、 $bar = (string) 1; の場合、$bar はstring型に($bar = '1'; とした時と同じ)なるということでしょうか。 私の質問内容でいうと、「変数をint型に変換してから比較する」という処理を行っているという認識で合っていますか? (追記) わざわざ編集していただきありがとうございます。 とても分かりやすいご回答、ありがとうございました!
2021/10/29 03:23
2021/10/29 03:38 編集
退会済みユーザー
2021/10/29 03:41
2021/10/29 03:44
2021/10/29 03:49