对于如下所示的switch
语句,有更优的做法
$a = $b = $c = $d = 0;
switch ($case) {
case 'a': $a++;break;
case 'b': $b++;break;
case 'c': $c++;break;
case 'd': $d++;break;
default: throw new Exception("message");
}
更优示例
$dict = ['a' => 0, 'b' => 0, 'c' => 0, 'd' => 0];
if (!array_key_exists($case, $dict)) {
throw new Exception("message");
}
$dict[$case]++;
同样的,对于在switch中,执行超过一次的语句块,也可以使用这种方式优化,示例
switch ($case) {
case 'a':
// 操作1
// 操作2
// 操作3
break;
case 'b':
// 操作4
// 操作5
// 操作6
break;
}
可以转换为
function f1() {
// 操作1
// 操作2
// 操作3
}
function f2() {
// 操作4
// 操作5
// 操作6
}
$dict = ['a' => 'f1', 'b' => 'f2']; // 如果方法是某个类的成员函数则可以用['a' => [$class, 'method'], 'b' => [$class, 'method']]
call_user_func($dict[$case]);