Czy potrzebujesz przerwy w przełączniku, gdy używany jest powrót?

110

Zastanawiałem się, czy muszę użyć funkcji „przerwa” w funkcji „przełącznik”, gdy używany jest „powrót”.

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

Wypróbowałem to i działa dobrze bez "przerwy". Ale muszę wiedzieć, czy to jest bezpieczne. Dziękuję Ci.

EMC
źródło
1
co się stanie, jeśli $ string = 'testx';
Jagadeesan

Odpowiedzi:

132

Tak, możesz użyć returnzamiast break...

breakjest opcjonalny i służy do zapobiegania „ wypadaniu ” przez wszystkie inne caseinstrukcje. Więc returnmoże być używany w podobny sposób, jak returnkończy wykonywanie funkcji.

Ponadto, jeśli wszystkie twoje casestwierdzenia są takie:

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

A po switchstwierdzeniu, które właśnie masz return $result, użycie return find_result(...);w każdym z nich casesprawi, że twój kod będzie znacznie bardziej czytelny.

Na koniec nie zapomnij dodać defaultprzypadku. Jeśli myślisz, że twój kod nigdy nie dotrze do defaultsprawy, możesz użyć assertfunkcji, ponieważ nigdy nie możesz być pewien.

bezumiejętność
źródło
Dziękuję Luzhin, tak pomyślałem.
EMC
16

Nie potrzebujesz przerwy, powrót zatrzymuje wykonanie funkcji.

(dla odniesienia: http://php.net/manual/en/function.return.php mówi:

Wywołana z wnętrza funkcji instrukcja return () natychmiast kończy wykonywanie bieżącej funkcji

)

Nanne
źródło
4

Nie, nie jest to konieczne, ponieważ wywołanie słowa kluczowego return będzie wskazywać, że dana funkcja, którą wywołano przełącznik / obudowę, dobiegła końca.

Gayan Hewa
źródło
3

Nie, nie potrzebujesz breakw switch caseoświadczeniu. W breakrzeczywistości jest opcjonalny, ale używaj go ostrożnie.

Zimorodek
źródło
2

Nie potrzebujesz tego, ale zdecydowanie radzę używać go w każdym przypadku jako dobrej praktyki.

Martin Bean
źródło
6
nie ma sensu, ponieważ powrót wyraźnie istnieje samodzielnie po wykonaniu =) Mniej kodu jest lepsze.
EMC
7
Mniej kodu! = Lepiej. Zagraj w golfa w kod. Wolałbym mieć czytelny, wyraźny kod niż nadmiernie zoptymalizowany kod, aby można go było umieścić w jednym wierszu kosztem czytelności i zrozumiałości.
Martin Bean
3
Możesz się z tym spierać w obie strony. Niektóre kompilatory ostrzegają przed niewykonalnym kodem po powrocie w przełączniku, inne nie. To osobiste preferencje i przynajmniej dla mnie jest to zabarwione tym, ile razy zostałem ugryziony przez wypadnięcie z przełącznika, lubię widzieć przerwę.
Harry
2

Przerwa jest tylko ostrzeżeniem używanym do ograniczenia kontroli struktury przełącznika przed przejściem do innego przypadku ... na przykład, jeśli masz trzy stwierdzenia przypadku i wartość jest dla pierwszego przypadku i użyłeś przypadku bez żadnej struktury podziału, wtedy wszystkie następujące przypadki zostanie wykonany mimo spełnienia warunku tylko dla pierwszego przypadku ... Return może wykonać funkcję asme, więc nie będzie problemu, jeśli użyjesz return zamiast break ponieważ return przejmie kontrolę z instrukcji switch case co jest w tej chwili potrzebne ...... mam nadzieję, że pomoże ....

Abhimanyu Srivastava
źródło
1

return przekazuje kontrolę z powrotem do metody wywołującej, gdzie jako break przeskakuje do pierwszej instrukcji po bloku switch.

Nishant Baranwal
źródło