Posted at

PHP switch文の応用的な使い方

More than 5 years have 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;

}