Czy w PHP jest jakieś polecenie zatrzymania wykonywania bieżącej lub nadrzędnej if
instrukcji, tak samo jak break
lub break(1)
dla switch
/ loop
. Na przykład
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
w powyższym kodzie PHP nie zrobi echo "test";
i przejdzie doecho "finish";
Potrzebuję tego, jeśli
$a="test";
if("test"==$a)
{
break;
echo "yes"; // I don't want this line or lines after to be executed, without using another if
}
echo "finish";
Chcę break
na if
rachunku powyżej i przystanku wykonującego echo "yes";
lub takich kodów, które nie są już konieczne do wykonania, nie może być lub nie być dodatkowy warunek, czy istnieje sposób, aby to zrobić?
Aktualizacja: Zaledwie 2 lata po wysłaniu tego pytania dorosłem, dowiedziałem się, jak kod można pisać w małych kawałkach, dlaczego zagnieżdżone if może być zapachem kodu i jak uniknąć takich problemów w pierwszej kolejności, pisząc łatwe w zarządzaniu, małe funkcje.
echo
(w twoim przykładzie) nigdy nie zostanie wykonany. Więc równie dobrze możesz go usunąć.try catch
takiej opcji?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Odpowiedzi:
Nie martw się komentarzami innych użytkowników, rozumiem cię, CZASAMI przy tworzeniu tych „wymyślnych” rzeczy są wymagane . Jeśli uda nam się złamać if, wiele zagnieżdżonych ifów nie będzie potrzebnych, dzięki czemu kod będzie znacznie bardziej przejrzysty i estetyczny.
Ten przykładowy kod ilustruje, że NIEKTÓRE SYTUACJE zostały przerwane, jeśli mogą być znacznie bardziej odpowiednie niż wiele brzydkich zagnieżdżonych ifów ... jeśli nie spotkałeś się z tą sytuacją, nie oznacza to, że nie istnieje .
Brzydki kod
Dobrze wyglądający kod
Jak mówi @NiematojakTomasz, użycie
goto
jest alternatywą, złe w tym jest to, że zawsze musisz zdefiniować etykietę (cel punktowy).źródło
if
elseif
na każdym nieudanym teście. Dokładnie tego szukałem, teraz mój kod jest zgodny z KISS i DRY :) Dzięki!Hermetyzuj swój kod w funkcji. Możesz przerwać wykonywanie funkcji
return
w dowolnym momencie.źródło
właściwy sposób:
Po przeczytaniu niektórych komentarzy zdałem sobie sprawę, że obsługa wyjątków nie zawsze ma sens w przypadku normalnej kontroli przepływu. W przypadku normalnego przepływu sterowania lepiej jest użyć opcji „Jeśli inaczej”:
Możesz również zapisać wartości zwracane przez proces w zmiennych, a następnie sprawdzić w blokach błędów / wyjątków, który proces się nie powiódł.
źródło
Ponieważ można rozbić się o do / while, daj nam „ zrobić ” jedną rundę. Z chwilą (fałsz) na końcu warunek nigdy nie jest prawdziwy i nie powtórzy się ponownie.
źródło
goto :
źródło
goto
, Dzieciątko Jezus zjada kotka. Ponadto xkcd.com/292goto
słowa kluczowego w kodach produkcyjnych i nigdy nie miałem problemów.Istnieje polecenie:
goto
Należy jednak pamiętać, że
goto
nie jest to zalecana praktyka, ponieważ powoduje to niezwykłe formatowanie kodu.źródło
Możesz użyć do-while (false):
jak opisano w http://php.net/manual/en/control-structures.if.php#90073
źródło
Nie, nie ma sposobu na „przerwanie” bloku if, tak jak w przypadku pętli.
:(
Więc zamień swój test w
switch
!Zastanawiam się, dlaczego nikt nie zachęcał Cię do używania instrukcji switch, skoro (nawet jeśli nie masz zbyt wielu przypadków testowych).
Czy uważasz, że jest ona zbyt szczegółowa?
Zdecydowanie wybrałbym to tutaj
Dla mnie Wyjątki mają na celu wywołanie błędów, a nie tak naprawdę kontrolowanie błędów wykonania.
Jeśli zachowanie przerwania, które próbujesz ustawić, nie dotyczy nieoczekiwanych błędów, obsługa wyjątków nie jest tutaj właściwym rozwiązaniem
:/
.źródło
:/
W ten sposób otrzymałem to, czego chcę. Używam przełącznika tylko z określonym przypadkiem, a następnie używam przerwy w przypadku, aby wybrać warunek. Powód, dla którego używam przerwania: warunek1 i warunek2 mogą spełniać oba warunki, w tej sytuacji stosowany jest tylko warunek 1 .IF jest selektywny zgodnie z kolejnością.
źródło
switch(true) { case true:
Nie.
Ale co powiesz na:
źródło
if
stwierdzeńif
stwierdzenie. Nie jestem pewien, jak zamierzasz tego uniknąć.Po prostu przenieś kod, który nie powinien być wykonywany, do
else/elseif
gałęzi. Naprawdę nie rozumiem, dlaczego miałbyś chcieć robić to, co próbujesz zrobić.źródło
Prosta odpowiedź jest taka, że nie, nie ma sposobu, aby zerwać z
if
instrukcją bez całkowitego zatrzymania wykonywania (viaexit
). Inne rozwiązania nie zadziałają, ponieważ nie mogę zmienić strukturyif
instrukcji, ponieważ wstrzykuję kod do wtyczki, na przykład:źródło
Odpowiadając na twoje pytanie, czy jest to osiągalne, czy nie, to tak, można to osiągnąć za pomocą operatora "goto" w php.
Jednak z etycznego punktu widzenia używanie „goto” nie jest dobrą praktyką i jeśli nie ma potrzeby używania goto, oznacza to, że kod musi zostać zrekonstruowany w taki sposób, aby można było usunąć wymóg goto.
Zgodnie z przykładowym kodem, który opublikowałeś powyżej, wyraźnie widać, że kod można zrekonstruować, a kod, który nie jest już potrzebny, można usunąć lub skomentować (jeśli istnieje taka możliwość do wykorzystania w przyszłości).
źródło
łącząc twoje stwierdzenia, myślę, że dałoby to pożądany rezultat. przejrzyste i proste, bez zbyt wielu stwierdzeń.
dla brzydkiego i dobrze wyglądającego kodu, moja rekomendacja byłaby następująca:
gdzieś w swoim normalnym kodzie
źródło
Myślę, że szukasz tego:
Podręcznik php zawiera
for
przykłady, ale myślę, że działa również w przypadkuif
źródło
mam proste rozwiązanie bez wielu zmian. początkowe stwierdzenie to
więc wydaje się to proste. wypróbuj taki kod.
jeśli chcesz spróbować bez tego kodu, jest to proste. i możesz wrócić, kiedy chcesz. innym rozwiązaniem są bloki komentarzy. lub po prostu pomyśl i spróbuj w innym oddzielnym kodzie i skopiuj, wklej tylko wynik do końcowego kodu. a jeśli kod nie jest już potrzebny, w twoim przypadku rezultat może być
z tym kodem oryginalne oświadczenie jest całkowicie przestrzegane ... :) i bardziej czytelne!
źródło
Prostym rozwiązaniem jest zakomentowanie tego.
Dodatkową korzyścią jest to, że nie zmieniasz oryginalnego kodu i możesz go opatrzyć datą, parafować i podać powód.
Dlaczego głosowanie przeciw, zgodnie z wnioskiem PO, myślę, że jest to doskonale uzasadnione rozwiązanie.
„Chcę [przerwać powyższą instrukcję if i] przestać wykonywać echo„ tak ”; lub takie kody, które nie są już potrzebne do wykonania, może istnieć lub nie musi istnieć dodatkowy warunek, czy istnieje sposób, aby to zrobić?"
Właściwie ktoś mógłby przyjrzeć się innym rozwiązaniom, za rok później i zastanowić się, co się tam dzieje. Zgodnie z moją sugestią, można zostawić dobrą dokumentację na przyszłość, co jest zawsze dobrą praktyką.
źródło
A co z użyciem operatora trójargumentowego?
Która jest identyczna z instrukcją if / else:
źródło
$a = $_POST['action'] ?? 'default';
Aby całkowicie zatrzymać działanie reszty skryptu, możesz po prostu zrobić
wyjście; // W miejscu przerwy. Reszta kodu nie zostanie wykonana
źródło
Spóźniłem się na imprezę, ale chciałem wnieść swój wkład. Dziwię się, że nikt nie zaproponował
exit()
. Jest dobry do testów. Używam go cały czas i działa jak urok.Kod zatrzyma się
exit()
i wszystko, co nastąpi później, nie będzie działać.Wynik
Działa również z
foreach()
iwhile()
. Działa naprawdę wszędzie, gdzie go umieścisz.Wynik
Użyj go z
forloop()
Wynik
W normalnym przypadku
Wynik
źródło
źródło