Вам нужен выключатель, когда используется возврат?

110

Мне было интересно, нужно ли мне использовать «break» в функции «switch», когда используется «return».

function test($string)
{
  switch($string)
  {
    case 'test1':
      return 'Test 1: ' . $string;
    case 'test2':
      return 'Test 2: ' . $string;
  }
}

Пробовал, работает без "обрывов" нормально. Но мне нужно знать, безопасно ли это. Спасибо.

EMC
источник
1
что будет, если $ string = 'testx';
Jagadeesan

Ответы:

132

Да, можно использовать returnвместо break...

breakявляется необязательным и используется для предотвращения " проваливания " всех остальных caseоператоров. Так returnможет использоваться аналогичным образом, поскольку returnзавершает выполнение функции.

Кроме того, если все ваши caseутверждения выглядят так:

case 'foo':
   $result = find_result(...);
   break;

И после только что switchнаписанного оператора return $resultиспользование return find_result(...);в каждом caseсделает ваш код более читабельным.

Наконец, не забудьте добавить defaultфутляр. Если вы думаете, что ваш код никогда не достигнет defaultслучая, вы можете использовать эту assertфункцию, потому что вы никогда не можете быть уверены.

бессмысленность
источник
Спасибо, Лужин, вот что я подумал.
EMC
16

Перерыв не нужен, возврат останавливает выполнение функции.

(для справки: http://php.net/manual/en/function.return.php говорит:

При вызове из функции оператор return () немедленно завершает выполнение текущей функции.

)

Nanne
источник
4

Нет, в этом нет необходимости, потому что когда вызывается ключевое слово return, это будет указывать на то, что конкретная функция, которую вызывали переключатель / case, подошла к концу.

Гаян Хева
источник
3

Нет, breakв switch caseзаявлении не требуется . На breakсамом деле это необязательно, но используйте его с осторожностью.

Halcyon
источник
2

Вам это не нужно, но я настоятельно рекомендую использовать его в любом случае в качестве хорошей практики.

Мартин Бин
источник
6
нет смысла, так как return явно существует сам по себе при выполнении =) Чем меньше кода, тем лучше.
EMC
7
Меньше кода! = Лучше. Иди поиграй в кодовый гольф. Я бы предпочел иметь читаемый, явный код, чем код чрезмерно оптимизированный, чтобы он мог быть в одной строке за счет удобочитаемости и понятности.
Мартин Бин
3
Вы можете поспорить с этим обоими способами. Некоторые компиляторы предупреждают о неисполняемом коде после возврата в переключателе, некоторые - нет. Это личное предпочтение, и, по крайней мере, для меня это зависит от того, сколько раз меня кусали, проваливаясь через выключатель, мне нравится видеть перерыв.
Гарри
2

Разрыв - это просто предупредительное заявление, используемое для ограничения управления структурой переключателя от перехода в другой случай ... например, если у вас есть три оператора case, а значение - для первого случая, и вы использовали case без какой-либо структуры break, тогда все следующие случаи будет выполняться, несмотря на то, что условие выполняется только для первого случая ... Return может выполнять функцию asme, поэтому не будет проблем, если вы используете return вместо break, потому что return заберет управление у оператора switch case что необходимо в данный момент ... надеюсь, это поможет ....

Абхиманью Шривастава
источник
1

return возвращает управление вызывающему методу, а при break переходит к первой инструкции после блока switch.

Нишант Баранвал
источник