Возможный дубликат:
"else if" быстрее, чем "switch() case" ?
В последнее время я столкнулся с множеством ситуаций, когда у меня очень простые условные выражения, и мне нужно отделить поток приложений. "Простейшие" средства для выполнения того, что я делаю, - это просто старая инструкция if
/elseif
:
if($value == "foo") {
// ...
} elseif($value == "bar") {
// ...
} elseif($value == "asdf" || $value == "qwerty") {
// ...
}
... но я также рассматриваю что-то вроде:
switch($value) {
case "foo":
// ...
break;
case "bar":
// ...
break;
case "qwer":
case "asdf":
// ...
}
Это кажется немного менее читаемым, но, возможно, более результативным? Однако, когда в условном выражении все больше и больше выражений, кажется, что оператор switch гораздо читабельнее и полезен:
switch($value) {
case "foo":
// ...
break;
case "bar":
case "baz":
case "sup":
// ...
break;
case "abc":
case "def":
case "ghi":
// ...
break;
case "qwer":
case "asdf":
// ...
}
Я также видел варианты, в которых поток кода разветвлен с использованием массивов и функций:
function branch_xyz() {/* ... */}
function branch_abc() {/* ... */}
function branch_def() {/* ... */}
$branches = array(
"xyz"=>"branch_xyz",
"abc"=>"branch_abc",
"def"=>"branch_def"
);
if(isset($branches[$value])) {
$fname = $branches[$value];
$fname();
}
Этот последний вариант также, вероятно, имеет преимущество в том, что он может быть распределен между несколькими файлами, хотя он довольно уродлив.
Что, по вашему мнению, имеет наибольшее преимущество с наименьшими компромиссами с точки зрения производительности, удобочитаемости и простоты использования?