проверка работоспособности компилятора C… нет

Это не так, как работают переключатели.

В соответствии с руководством :

Оператор switch похож на ряд операторов IF на то же выражение. Во многих случаях вам может понадобиться сравнить одну и ту же переменную (или выражение) со многими различными значениями и выполнить другой фрагмент кода в зависимости от того, какое значение оно равно. Это как раз то, что означает оператор switch.

blockquote>

Оценка, подобная

case ($x > 5):

, просто равна

case true:

или

case false:

в зависимости от значения $x, поскольку ($x > 5) является ОЦЕНКОЙ , а не VALUE . Переключатели сравнивают значение параметра, чтобы увидеть, соответствует ли он любому из case s.

switch($x) {
    case ($x > 5): // $x == ($x > 5)
        echo "foo";
        break;
    case ($x <= 5): // $x == ($x <= 5)
        echo "bar"
        break;
    default:
        echo "default";
        break;
}

Сравнение в приведенном выше коде эквивалентно

if ($x == ($x > 5)) {
    echo "foo";
} elseif ($x == ($x < 5)) {
    echo "bar";
} else {
    echo "five";
}

который (когда $x == 50) эквивалентен

if ($x == true) {
    echo "foo";
} elseif ($x == false) {
    echo "bar";
} else {
    echo "five";
}

, который эквивалентен

if (true) { // $x == true is the same as saying "$x is truthy"
    echo "foo";
} elseif (false) {
    echo "bar";
} else {
    echo "five";
}

IF, однако вы использовали оператор switch, поскольку он предназначен для использования (для сравнения параметра с конкретными значениями):

switch ($x) {
    case 50:
        echo "foo ";
    case 30:
        echo "bar ";
    default:
        echo "foo-bar";
}

и $x == 50, ваш выход будет

foo bar foo-bar

из-за того, что у вас нет break в ваших случаях.

Если бы вы добавили ключевое слово break в конец каждого случая, вы выполнили бы только код для этого конкретного случая.

switch ($x) {
    case 50:
        echo "foo ";
        break;
    case 30:
        echo "bar ";
        break;
    default:
        echo "foo-bar";
        break;
}

Вывод:

foo 

13
задан Ava 19 March 2012 в 05:13
поделиться