PHPの落とし穴

| | コメント(0) | トラックバック(0) この記事をはてなブックマークに追加

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 の違いくらいは意識したほうが身のためと言えましょう。

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHPの落とし穴

このブログ記事に対するトラックバックURL: http://www.studio-wiz.com/mt/mt-tb.cgi/6

コメントする

このブログ記事について

このページは、マピロが2008年7月16日 11:02に書いたブログ記事です。

ひとつ前のブログ記事は「Amazon検索「すべての商品」の検索結果」です。

次のブログ記事は「AmazonDS検索を修正」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.14