MasterYodaの昼下がり

日々の備忘録的なアレ

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 。

大事なことだからもう一度
===を使おう