«Если» против «переключателя» [дубликат]

Возможный дубликат:
«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();
}

Этот последний вариант также, вероятно, имеет то преимущество, что его можно распределять между несколькими файлами, хотя он довольно уродлив.

Что, по вашему мнению, имеет больше преимуществ с наименьшим количеством компромиссов с точки зрения производительности, удобочитаемости и простоты использования?

Ответы на вопрос(4)

Ваш ответ на вопрос