PHP

【php】== 比較演算子を正しく説明できますか?

More than 1 year has passed since last update.

お題

比較演算子の ==、
この演算子の説明によく、 値の比較を行う演算子として説明されています。

これだと半分だけ正しくて、例えばこの式は値が等しいとして、1が出力されます。
しかし値の比較を行うだけだと、理由が説明できません。

echo ('123abc' == 123) ? '1' : '2';

== は正確には
比較の前に型変換を行い、値の比較を行う演算子です。
先ほどの式だと、比較の前に左辺の値が一度int型に変換されて、123として評価されています。

// 比較経路
('123abc' == 123)
   
((int)'123abc' == 123)
   
(123 == 123)
   
123同士の比較で等しい値として認識

またややこしいのが、必ず同一の型変換が行われるわけでなく、
比較する値によって型変換の内容は変わってきます。

結論

=== の場合、比較の際には型変換は行われず、型と値の比較を行います。
ややこしい型変換パターンを気にすることもありません。
やっぱり基本は === を使いましょう。