PHP - Разница между прерыванием и продолжением в случае переключения


В чем разница между

switch (variable) {
        case 'value':
        # code...
        break;

        case 'value':
        # code...
        break;
}

И этот

switch (variable) {
        case 'value':
        # code...
        continue;

        case 'value':
        # code...
        continue;
}

Это действительно другой результат или просто один и тот же?

Author: Vinsens, 2016-03-25

3 answers

Вот простой пример кода с обоими упомянутыми выше случаями переключения

<?php
    $variable = 20;
    echo "Normal<br/>";
    switch ($variable) {
        case '20':
            echo "twenty";
        break;
        case '21':
            echo "twenty one";
        break;
    }

    echo "<br/><br/>With Continue<br/>";
    switch ($variable) {
        case '20':
            echo "twenty";
        continue;
        case '21':
            echo "twenty one";
        continue;
    }
?>

Когда я выполняю приведенный выше код, я получаю следующий вывод

Normal
twenty

With Continue
twenty

Как?

Работа оператора разрыва

Оператор Break заставляет выполнение кода выходить из блока и выполнять следующие операторы, из-за чего оператор switch выполнит только один оператор case и выйдет из блока switch без выполнения других блоков case.

Работа по продолжению заявление

Оператор Continue в случае циклов приведет к тому, что цикл остановит выполнение текущей итерации цикла и перейдет к следующей итерации цикла (если таковая существует), но в случае оператора switch это рассматривается как оператор цикла, но никаких следующих итераций, вызывающих оператор переключателя выхода.

У нас тоже может быть оператор switch без операторов break, как это

<?php
    $variable = 20;
    echo "Normal";
    switch ($variable) {
        case '19':
            echo "<br/>Nineteen";
        case '20':
            echo "<br/>twenty";
        case '21':
            echo "<br/>twenty one";
        case '23':
            echo "<br/>twenty three";
    }
?>

Вывод приведенного выше кода будет

Normal
twenty
twenty one
twenty three

Т.е. выполнение всех операторов case после случая, когда найдено первое совпадение.

 0
Author: Akshay Khale, 2016-03-25 13:18:27

В PHP два приведенных выше кода работают одинаково. Здесь операторы break и continue препятствуют переходу управления к следующему case. То есть continue действует точно так же, как break здесь. Также переключатель предназначен для выполнения только один раз. Это не петля. Следовательно, continue здесь не имеет значения.

Примечание: Если есть цикл, охватывающий это утверждение switch, то результат будет другим.

 1
Author: Harikrishnan, 2016-03-25 12:45:27

Это особый случай для PHP, потому что, как указано в официальной документации :

Примечание: В PHP оператор switch считается циклической структурой для целей продолжения. продолжение ведет себя как перерыв (когда аргументы не передаются). Если переключатель находится внутри цикла, продолжение 2 будет продолжено со следующей итерацией внешнего цикла.

Таким образом, по сути, это означает, что между вашими двумя примерами нет реальной разницы. Однако для ясность Я думаю, что было бы лучше использовать break, поскольку это стандарт на других языках. Обратите также внимание, что вы можете использовать continue 2 (или 3, 4...) для перехода к следующей итерации цикла, если переключатель находится внутри цикла (или более).

 1
Author: Technoh, 2016-03-25 12:54:09