PHPのswitchのcase文には関数が使える

< ?php
$test = 'aaa';
switch (true) {
    case ($test > 10):
        echo "10!";
        break;
    case is_numeric($test):
        echo "digit!";
        break;
    case is_float($test):
        echo "float!";
        break;
    case is_aaa($test):
        echo "aaa!";
        break;
    default:
        break;
}
 
function is_aaa($str)
{
    return ($str === 'aaa') ? true : false;
}

URLのパラメータが数字だったら、という処理をif文ではなくswitch文で書けたらきれいかな、と思ってやってみたら動きました。ユーザ定義関数を使うときはちゃんとboolを返さないと動かないようです。

マニュアルには見当たらない構文ですが使う機会はありそう。他のLLでも動くんでしょーか。

その他の PHP 関連記事

追記
ソースの一部を変更。
3年以上経過した今見ると、URLのパラメータのチェックには PHP5.2 以降なら filter_var を使った方が自然かと思います。

This entry was posted in いじる. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

2 Comments

  1. Posted 2006/06/14 at 5:50 pm | Permalink

    うーん、これって、$test と関数が適用された結果(サンプルだと true || false )が == で比較されて、その結果が trueなら case文が成立したとみてるんじゃないでしょうか?

    $test = 0; // boolean値に自動変換されるときは false
    で試すと、最初の ($test > 10) => false とマッチしてしまいます。

    switch(true){ case ($test > 10): …. }
    とか書いたほうがよいかと。

  2. Posted 2006/06/14 at 8:49 pm | Permalink

    なるほど。
    コメントありがとうございますー。switch(true)って面白いですね。

One Trackback

  1. By Dragonfly on 2006/06/16 at 8:50 am

    コードがすっきり!PHPのswitchのcase文には関数が使える…

    zuzara.com � PHPのswitchのcase文には関数が使えるswi…

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Page optimized by WP Minify WordPress Plugin