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.


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.


Dziękuję Luzhin, tak pomyślałem.
EMC


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.


3

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


2

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


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 ....


1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.