まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2008-10-01 (水) 2008-10-08 (水) > 最新


2008-10-02 (木)

PHP の switch 文は怖くて使えない

PHP の == 演算子が地雷なのは知っていましたが、 まさか switch 文にも同じ問題があるとは思いませんでした。 これでピンと来ない人は、先に以下のページでも読んで下さい。 PHP が落とし穴だらけの言語であることが分かります。

さて、私が今回はまりそうになったのはこういうコードです。

function filter($value) {
    switch ($value) {
    case 'abc':
    case 'def':
        return $value;
        break;
    default:
        return '';
        break;
    }
}

要するに、入力値として abc と def だけ受け付けようという意図なんですが、 このコードにはバグがありまして、

php > echo filter(0);
0

このように入力値としてゼロという数値を与えると、返り値もゼロになります。 えーっ! と思いマニュアルを読んでみると、

注意: switch/case が行うのは、緩やかな比較 であることに注意しましょう。

としっかり書かれていました。 コメント欄にも、こういう危なっかしいコードの例や対処法が山ほど載っていました。

それで私は結局、

function filter($value) {
    if ($value === 'abc' || $value === 'def') {
        return $value;
    }
    return '';
}

のように if 文と === 演算子を使うようにしました。 switch 文はもう怖くて使えません。

Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集