phpの==の挙動
phpの==はお節介な挙動をみせる。
散々言われてることだけど、厳密比較(===)を使うようにしよう。
さもないと思わぬバグを生み出す。
phpの==は、よしなに型を合わせる。
それが便利なこともあるが、大抵の場合は余計なお世話である。
サンプル
<?php if (1 == '1_1') { echo "True!?"; }
結果
True!?
phpの型の相互変換の挙動(特に文字列の数値への変換)を知らないとまさか!?と思うような結果になる。
数値として文字列が評価された時の挙動として、
文字列の最初の部分により値が決まります。文字列が、 有効な数値データから始まる場合、この値が使用されます。
サンプルの例だと、1_1なので、1に変換されif (1 == 1)
で真となる。
厳密比較を使うと、当然ながら偽となる。
マニュアルの比較演算子の項から抜粋
例 | 名前 | 結果 |
---|---|---|
$a == $b | 等しい | 型の相互変換をした後で $a が $b に等しい時に TRUE。 |
$a === $b | 等しい | $a が $b に等しく、および同じ型である場合に TRUE 。 |
大事なことだからもう一度
===を使おう