< ?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 を使った方が自然かと思います。
2 Comments
うーん、これって、$test と関数が適用された結果(サンプルだと true || false )が == で比較されて、その結果が trueなら case文が成立したとみてるんじゃないでしょうか?
$test = 0; // boolean値に自動変換されるときは false
で試すと、最初の ($test > 10) => false とマッチしてしまいます。
switch(true){ case ($test > 10): …. }
とか書いたほうがよいかと。
なるほど。
コメントありがとうございますー。switch(true)って面白いですね。
One Trackback
コードがすっきり!PHPのswitchのcase文には関数が使える…
zuzara.com � PHPのswitchのcase文には関数が使えるswi…