PHP

PHP switch文の応用的な使い方

More than 1 year has passed since last update.

比較する値としてtrueを指定すると、if-elseifの代わりとして使える。括弧が少なくて済む分、多少見通しが良くなる。

<?php
switch(true) {
case preg_match('/^\d+/', $val) || strlen($val) > 20:
    doSomething(1);
    break;

case isHoge($val):
    $val = "hogehoge";
    break;

case empty($val) && empty($var):
    doSomething(2);
    break;

default:
    doSomething(3);
}

Lispのcondみたいな感じ。

他、値としてfalseを指定するとunless代わりになるが、わかりにくいのでやめた方が良いと思う。

あと論理orの代わりにcaseを分割するというテクニックもあるが、短絡評価が効かなくなるで、普通は使わない方が良い。

<?php
switch(true) {
case empty($x):
case checkFoo($x, $y) && checkBar($z):
    // empty($x) || (checkFoo($x, $y) && checkBar($z))
    // と同じ意味だが、empty($x) がtrueのときにも
    // 後続の条件が評価されてしまう
    break;

}