PHPは型判定を割と勝手にやってくれます。
人によっては便利なんでしょうが、ワタクシC言語出身なのでそれがとっても気持ち悪い。
違う型同士を比較とか関数に型違いの引数を渡すとか気味悪い。まあその気味悪さを乗り越えて使ってみると確かに便利なんだけど、中身の処理を意識しないで使うとバグの元になる。それも自分で見つけるのが困難なバグになりかねない。あとPHPはバージョン変わると挙動が劇的に変わることがあるので厳密にできるところはそうした方が後々のため。
たとえば、
bool in_array ( mixed needle, array haystack [, bool strict] )
という関数がある。
これは第一引数の値が第二引数の配列内に存在するかどうかを判定するものだが、配列の各要素の型は必ずしも一様ではないため違う型同士の判定が起こり得る。その場合の落とし穴がこれだ。
$str_array = array('a', 'b', 'c');
$result = in_array(0, $str_array);
この処理の結果、$result はなんと TRUE になる。
比較の際に第二引数のほうを数値にキャストするからだ。
$result = in_array(0, $str_array, TRUE);
とすると型の一致も判定するので、$result は FALSE となる。
型判定、とても大事。ちょっとしたスクリプトを書くくらいのコーディングでも NULL と 0 と FALSE の違いくらいは意識したほうが身のためと言えましょう。
コメントする