Help us understand the problem. What is going on with this article?

PHPの自動キャストについて

More than 1 year has passed since last update.

自動キャストとは

PHPには、異なる型の演算を行う場合や特定の引数を必要としている時に異なる型を渡した場合などに自動でキャストしてくれると言う便利なものです。例として、文字列のキャストを書いていこうと思います。

文字列

以下のコードはどうなるでしょう?

if('0.0' == '0')
   echo '"0.0"と"0"は等しいです。';
end

こちらの結果は、なんと「"0.0"と"0"は等しいです。」と出力されます。どちらも文字列で比較をしているのにどうしてこのようなことが起こるのか順を追って整理していきましょう。

"0.0"と"0"は等しいです。

PHPの性質の1つで、二項演算で比較をする際、2つの項が両方「数値らしい文字列」の場合は、「整数型または浮動小数点数型」にキャストするというものがあります。(ここでいう数値らしい文字列は、10進数を表した文字列、16進数を表した文字列など)

それを踏まえていうと…

  • '0.0'が数値らしい文字列は判断され、「浮動小数点数型」にキャストされる
  • '0'が同様に数値らしい文字列は判断され、「整数型」にキャストされる
  • 浮動小数点数型と整数型の比較になり、整数0が浮動小数点数型0.0にキャストされる
  • 浮動小数点数型0.0と浮動小数点数型0.0の比較になり、結果が成り立つ

以上の流れになります。

結論としては、比較演算の際には、「==」を使うのは極力避けましょう。型までより厳密に比較してくれる「===」を使いましょう!

参考

条件式の「==」と「===」の意味と違いの3つのポイント
比較演算子 "==" と "===" の違い (PHPプログラミング)
PHP での「==」「===」、「!=」「!==」の違いについて

おわりに

拙い文章になりましたが、以上になります。
何かご指摘、ご質問ございましたらコメントにてお願い致します。
また、まだまだこれから勉強していくつもりです、PHP頑張ります〜

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away