Gibt es in PHP einen Befehl, die Ausführung der aktuellen oder übergeordneten if
Anweisung zu beenden , genau wie break
oder break(1)
für switch
/loop
. Beispielsweise
$arr=array('a','b');
foreach($arr as $val)
{
break;
echo "test";
}
echo "finish";
im obigen Code reicht PHP nicht aus echo "test";
und geht zuecho "finish";
Ich brauche das für wenn
$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";
Ich möchte break
die if
obige Anweisung befolgen und die Ausführung beendenecho "yes";
oder solche Codes, die nicht mehr ausgeführt werden müssen, möglicherweise eine zusätzliche Bedingung haben oder nicht. Gibt es eine Möglichkeit, dies zu tun?
Update: Nur 2 Jahre nach dem Posten dieser Frage bin ich aufgewachsen und habe gelernt, wie Code in kleinen Stücken geschrieben werden kann, warum verschachtelte Ifs nach Code riechen können und wie man solche Probleme überhaupt vermeidet, indem man überschaubare, kleine Funktionen schreibt.
echo
(in Ihrem Beispiel) niemals ausgeführt. Sie können es also genauso gut löschen.try catch
Option?if (condition) { if ( oneothercondition ) stop; if ( yetothercondition ) stop; // go ahead , all is fine }
Antworten:
Machen Sie sich keine Sorgen über Kommentare anderer Benutzer, ich kann Sie verstehen, MANCHMAL, wenn Sie diese "ausgefallenen" Dinge entwickeln, sind sie erforderlich . Wenn wir ein Wenn brechen können, sind viele verschachtelte Wenns nicht erforderlich, was den Code viel sauberer und ästhetischer macht.
Dieser Beispielcode veranschaulicht, dass BESTIMMTE SITUATIONEN, bei denen ein Fehler aufgetreten ist, viel besser geeignet sind als viele hässliche verschachtelte Ifs. Wenn Sie dieser bestimmten Situation nicht begegnet sind, bedeutet dies nicht, dass sie nicht vorhanden ist .
Hässlicher Code
Gut aussehender Code
Wie @NiematojakTomasz sagt, ist die Verwendung von
goto
eine Alternative. Das Schlechte daran ist, dass Sie immer die Bezeichnung (Punktziel) definieren müssen.quelle
if
elseif
bei jedem fehlgeschlagenen Test einen Code setzen . Genau das habe ich gesucht, jetzt ist mein Code KISS- und DRY-konform :) Danke!Kapseln Sie Ihren Code in eine Funktion. Sie können die Ausführung einer Funktion
return
jederzeit mit beenden .quelle
richtige Art und Weise, dies zu tun:
Nachdem ich einige der Kommentare gelesen hatte, stellte ich fest, dass die Ausnahmebehandlung für eine normale Flusskontrolle nicht immer sinnvoll ist. Für einen normalen Kontrollfluss ist es besser, "If else" zu verwenden:
Sie können die Prozessrückgabewerte auch in Variablen speichern und dann in den Fehler- / Ausnahmeblöcken überprüfen, welcher Prozess fehlgeschlagen ist.
quelle
Da Sie aus einer do / while-Schleife ausbrechen können , lassen Sie uns eine Runde " machen ". Mit einer Weile (falsch) am Ende ist die Bedingung nie wahr und wird sich nicht wiederholen.
quelle
gehe zu :
quelle
goto
, wenn Sie es benutzen , frisst das Jesuskind ein Kätzchen. Auch xkcd.com/292goto
Schlüsselwort (nicht ausgiebig) in Produktionscodes verwendet und hatte nie Probleme.Es gibt Befehl:
goto
Denken Sie jedoch daran, dass dies
goto
keine empfohlene Vorgehensweise ist, da der Code dadurch ungewöhnlich formatiert wird.quelle
Sie könnten ein do-while (false) verwenden:
wie unter http://php.net/manual/en/control-structures.if.php#90073 beschrieben
quelle
Nein, es gibt keine Möglichkeit, einen if-Block so zu "brechen", wie Sie es in Schleifen tun würden.
:(
Machen Sie aus Ihrem Test einen
switch
!Ich frage mich, warum Sie seitdem niemand mehr dazu ermutigt hat, die switch-Anweisung zu verwenden (auch wenn Sie nicht zu viele Testfälle haben).
Denken Sie, dass sie zu ausführlich ist?
Ich würde es auf jeden Fall hier versuchen
Für mich sollen Ausnahmen Fehler auslösen und Ausführungsfehler nicht wirklich kontrollieren.
Wenn es sich bei dem Unterbrechungsverhalten, das Sie festlegen möchten, nicht um unerwartete Fehler handelt, ist die Ausnahmebehandlung hier nicht die richtige Lösung
:/
.quelle
:/
Auf diese Weise habe ich bekommen, was ich will. Ich benutze einen Schalter hat nur einen bestimmten Fall und benutze dann break in case, um zu wählen, ob Bedingung. Der Grund, warum ich die Pause verwende: Bedingung1 und Bedingung2 können beide erfüllen, in dieser Situation wird nur Bedingung1 angewendet .IF ist gemäß der Reihenfolge selektiv.
quelle
switch(true) { case true:
Nein.
Aber wie wäre es mit:
quelle
if
Aussagen zu vermeidenif
Aussage. Ich bin mir nicht sicher, wie Sie dies vermeiden sollen.Verschieben Sie einfach den Code, der nicht ausgeführt werden soll, in den
else/elseif
Zweig. Ich verstehe nicht wirklich, warum Sie das tun wollen, was Sie versuchen.quelle
Die einfache Antwort lautet: Nein, es gibt keine Möglichkeit, von einer
if
Anweisung abzubrechen , ohne die Ausführung vollständig zu stoppen (viaexit
). Andere Lösungen funktionieren bei mir nichtif
, da ich die Struktur der Anweisung nicht ändern kann , da ich Code wie folgt in ein Plugin einfüge:quelle
Wenn Sie auf Ihre Frage antworten, ob dies erreichbar ist oder nicht, dann ist dies mit dem "goto" -Operator von php erreichbar.
Aber ethisch gesehen ist es keine gute Praxis, "goto" zu verwenden, und wenn goto verwendet werden muss, bedeutet dies, dass der Code so rekonstruiert werden muss, dass die Anforderung von goto entfernt werden kann.
Anhand des oben veröffentlichten Beispielcodes ist deutlich zu erkennen, dass der Code rekonstruiert werden kann und der nicht mehr benötigte Code entweder gelöscht oder kommentiert werden kann (sofern die Möglichkeit einer zukünftigen Verwendung besteht).
quelle
Wenn Sie Ihre Aussagen kombinieren, würde dies Ihnen das gewünschte Ergebnis bringen. sauber und einfach, ohne zu viele Aussagen zu haben.
Für den hässlichen und gut aussehenden Code wäre meine Empfehlung:
irgendwo in Ihrem normalen Code
quelle
Ich denke du suchst das:
Das PHP-Handbuch zeigt
for
Beispiele, aber ich denke, es funktioniert auch fürif
quelle
Ich habe eine einfache Lösung ohne viele Änderungen. Die erste Aussage ist
so scheint es einfach. Versuchen Sie Code wie diesen.
Wenn Sie es ohne diesen Code versuchen möchten, ist es einfach. und Sie können zurück, wenn Sie wollen. Eine andere Lösung sind Kommentarblöcke. oder denken Sie einfach nach und versuchen Sie es mit einem anderen getrennten Code und kopieren Sie nur das Ergebnis in Ihren endgültigen Code. und wenn ein Code in Ihrem Fall nicht mehr erforderlich ist, kann das Ergebnis sein
Mit diesem Code wird die ursprüngliche Aussage vollständig respektiert .. :) und besser lesbar!
quelle
Die einfache Lösung besteht darin, es auskommentieren.
Der zusätzliche Vorteil besteht darin, dass Sie Ihren ursprünglichen Code nicht ändern und ihn datieren, initialisieren und einen Grund dafür angeben können.
Warum die Abstimmung nach unten, laut OP-Anfrage halte ich dies für eine absolut gültige Lösung.
"Ich möchte [die obige if-Anweisung brechen und] die Ausführung des Echos" yes "beenden. Oder solche Codes, die nicht mehr ausgeführt werden müssen, können eine zusätzliche Bedingung sein oder nicht. Gibt es eine Möglichkeit, dies zu tun?"
Tatsächlich könnte sich jemand ein Jahr später einige der anderen Lösungen ansehen und sich fragen, was dort vor sich geht. Nach meinem Vorschlag könnte man eine gute Dokumentation zum späteren Nachschlagen hinterlassen, was immer eine gute Praxis ist.
quelle
Was ist mit der Verwendung eines ternären Operators?
Welches ist identisch mit dieser if / else-Anweisung:
quelle
$a = $_POST['action'] ?? 'default';
Um den Rest des Skripts vollständig zu stoppen, können Sie dies einfach tun
Ausfahrt; // Anstelle von Pause. Der Rest des Codes wird nicht ausgeführt
quelle
Ich bin zu spät zur Party, aber ich wollte dazu beitragen. Ich bin überrascht, dass niemand vorgeschlagen hat
exit()
. Es ist gut zum Testen. Ich benutze es die ganze Zeit und arbeitet wie Charme.Der Code stoppt bei
exit()
und alles danach wird nicht ausgeführt.Ergebnis
Es funktioniert mit
foreach()
undwhile()
auch. Es funktioniert überall dort, wo Sie es wirklich platzieren.Ergebnis
Verwenden Sie es mit einem
forloop()
Ergebnis
Im Normalfall
Ergebnis
quelle
quelle