Чи потрібен перерва в перемикачі, коли використовується повернення?


110

Мені було цікаво, чи потрібно мені використовувати функцію "перерва" у функції "перемикання", коли використовується "повернення".

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

Я спробував це, і він працює чудово, без «перерви». Але мені потрібно знати, чи безпечно це. Дякую.


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 () негайно закінчує виконання поточної функції

)


4

Ні, це не потрібно, тому що, коли викликається повернення ключового слова, це вказуватиме на те, що конкретна функція, яку викликав перемикач / випадок, закінчилася.


3

Ні, вам не потрібно breakв switch caseзаяві. Це breakнасправді необов’язково, але користуйтеся обережно.


2

Вам це не потрібно, але я б настійно радив використовувати його в будь-якому випадку як добру практику.


6
немає сенсу, оскільки повернення чітко існує самим собою при виконанні =) Менше коду краще.
EMC

7
Менше коду! = Краще. Іди грай у гольф-код. Я вважаю за краще читати, явний код, ніж код надмірно оптимізований, щоб він міг бути в одному рядку за рахунок читабельності та зрозумілості.
Мартін Бін

3
Ви можете аргументувати це обома способами. Деякі компілятори попереджають про невиконаний код після повернення в комутатор, деякі - ні. Це особисті переваги, і для мене, принаймні, воно забарвлене тим, скільки разів мене вкусив, потрапляючи через вимикач, мені подобається бачити перелом.
Гаррі

2

Перерва - це лише застереження, яке використовується для обмеження контролю над будовою комутатора від переходу в інший випадок ... наприклад, якщо у вас є три заяви і значення має значення для першого випадку, і ви використовували case без будь-якої структури перерви, то всі наступні випадки буде виконано, незважаючи на те, що умова виконується лише в першому випадку ... Повернення може виконувати функцію asme, тому це не буде проблемою, якщо ви використовуєте return замість перерви, оскільки повернення візьме контроль від заяви вимикача яка потреба в цей момент ...... сподіваюся, що це допомагає ....


1

return повертає керування назад до виклику методу, де як перерва переходить до першої інструкції після блоку комутації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.