PHP und die goto-Anweisung, die in PHP 5.3 hinzugefügt wird
Den "goto" - Anweisung kommt direkt aus der ASM oder andere assembler-Sprache.
Hier ist ein link: http://be2.php.net/manual/en/control-structures.goto.php
Frage ich mich: was können diese tun, um meinen code besser organisiert? Wie kann ich dies umsetzen in größere Projekte, ohne Fehler.
Da die goto-erlauben Sie springen hin und her, zufälligen Zuweisungen und unendliche Schleifen warten, um zu geschehen, wenn Sie dies der falsche Weg.
Kann mir jemand ein Beispiel für eine gute Nutzung dieser?
EDIT: OK, ich habe gesehen, wie einige der Antworten und anscheinend ein breiter Konsens besteht über die Verwendung von "goto" - Anweisung, und es wird schlecht.
So, ich bin immer noch Fragen: warum sollte PHP die Mühe, um es in der Sprache. Wenn Sie nicht siehe etwas, das Sie es nicht tun würden... also warum?
Auch: Eine Diskussion hier auf StackOverflow über "goto" im Allgemeinen
EDIT2: zu Sehen, wie diese Frage induziert eine Menge schlechter Dinge zu traurig sein über die goto-Anweisung, ging ich und fragte meinen Vater. Er ist 52 Jahre alt und Wirtschaftsingenieur.
Er sagte mir ein paar mal hatte er ein gutes Programmieraufwand in seinen Tagen-und vor allem in FORTRAN und COBOL. Heute tut er ES-Dienste, server - &networkmanagment und so.
Na ja, er sagte ein paar Sachen über "zurück in mein Tag..."
Nach der Diskussion, dass ein bisschen kam er zurück, um die goto-Anweisung, die sagen, dass bereits in seinen Tagen als student, Sie bereits wusste, dass es nicht eine kluge Idee, es zu benutzen, aber Sie haben nicht viel besser. Try/catch war noch Jahre entfernt und Fehlerbehandlung kaum excisted.
Also, was hast du gemacht, um dein Programm überprüfen? Fügen Sie ein paar Zeilen am Ende, mit denen Sie print-Ausgabe und alles, was Sie brauchen, um zu überprüfen, in Ihrem code, und dann platzieren Sie die Zeile: "gehe zu drucken;", oder so ähnlich, starten Sie den Druck Ihrer Daten.
Und auf diese Weise, Sie nach und nach, Debuggen Sie Ihren code.
Er stimmt zu, dass die Verwendung von goto in die moderne Programmierung Welt ist ziemlich nutzlos. Der einzige Gebrauch, den er findet, gerechtfertigt, ist ein "emergency break", verwendet werden, in extremen debugging und unerwartete Situationen. Ein bisschen wie goto fatal_error;
und haben die "fatal_error" Teil des Codes, in der einige Dinge tun, um Ihnen zu zeigen, die in-depth Ergebnisse.
Aber nur während der Erzeugung von etwas. Ein fertiges Produkt sollte nicht von goto-Anweisungen.
SPÄT EDIT: Eine weitere Diskussion über die "goto" in PHP5.3/PHP6
InformationsquelleAutor der Frage KdgDev | 2009-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie das schreiben von PHP-code, sollten Sie nicht verwenden müssen springen. Ich denke, es ist ein Fehler, den Sie hinzufügen, denn es führt nur zu faul Programmierung.
Sehen
http://www.procata.com/blog/archives/2004/07/29/goto-in-php/
Für einen guten Kommentar auf die Ergänzung dieses auf PHP, und auch hier auf stack overflow,
GEHE immer noch schädlich?
InformationsquelleAutor der Antwort Mez
Habe ich immer nur zwei verwendet für
goto
:goto
sowieso (break <number>
in PHP, oderbreak <loop label>
in Java, etc.).In anderen Worten, wenn Sie nicht wissen, ob Sie sollten
goto
für etwas, sollten Sie nicht.InformationsquelleAutor der Antwort Michael Myers
Verwendet werden kann für debugging-Zwecke, so dass Sie nicht haben, zu kommentieren oder umgestalten von code-Blöcke nur zum vorübergehenden ändern der workflow.
InformationsquelleAutor der Antwort serg
Den wichtigsten nutzen sehe ich in dass gotos in einer Sprache ist die Fähigkeit, Anschluss über Sprachen. Ich schrieb ein parser-generator in C#, die generierten Parser mit gotos (da war es einfacher zu verwenden gotos als zu implementieren sane-control-Strukturen), und jetzt Portierung für PHP ist nicht so viel Kopfschmerzen.
InformationsquelleAutor der Antwort B T
springen können dazu beitragen, code-Duplizierung für stack-unwinding, die in pseudo-code unter:
( Pseudo-code von Robert Liebe, entnommen aus der linux-kernel-Archiv-mailing-Liste: https://lkml.org/lkml/2003/1/12/203 )
InformationsquelleAutor der Antwort Timothée Groleau
Gibt es keine solche Sache wie gute Verwendung von goto.
Vielleicht, nur vielleicht, es könnte nützlich sein, um aus mehreren verschachtelten Schleifen, aber Sie können bereits zu tun, dass mit "Pause 2" und so. Beschriftet bricht wie in Java wäre besser als springen für diesen Zweck.
Vielleicht ist es auch sinnvoll mit code geschrieben, ohne mit Ausnahmen, die, wenn Sie brauchen, um zu überspringen, um das Ende einer Reihe von Anweisungen, sobald eine ausfällt. Aber das ist nur die Befestigung crappy code mit mehr crappy code.
InformationsquelleAutor der Antwort Jaka Jančar
Ich gebe zu, ich habe noch nie verwendet, gehe in meine codes. 🙂
Der einzige Grund für mich scheint, zu erleichtern, die kürzeste Wanderroute aus anderen Sprachen PHP (praktisch nur die Sprache zu ändern, ohne Sie zu berühren, Kontrollstrukturen) und überarbeiten Sie den code auf der 2. Etappe der Portierung.
Persönlich glaube ich, dass bei gebildeten Kollegen und wie können Sie vermeiden, den bedingten Pause,-N von den Schlingen, würden Sie in der Lage sein, der Versuchung zu widerstehen springen.
InformationsquelleAutor der Antwort Csaba Kétszeri
In der Klassischen VB-Codierung, die Verwendung von goto ist praktisch für die Emulation try/catch-Fehlerbehandlung wie diese:
... und hier ist eine Art und Weise zu emulieren, die try/catch/finally ..
Kann es auch sinnvoll sein, für die Bereinigung am Ende einer Funktion, obwohl ich vermute, Sie könnte einen Fall machen, dass eine andere Funktion aufgerufen werden kann, zu tun, dass die Bereinigung.
In aller Ehrlichkeit, ich hatte noch nie einen Anlass in PHP, wo ich mir gedacht 'hmm, ich wünschte, es war eine goto-Anweisung'. Habe ich nicht gelesen bis auf den Grund, warum Sie beschlossen, dies zu tun, aber, die Jungs sind ziemlich schlau, und haben sich in PHP sehr gute Richtungen, so weit, so vielleicht die rechnen müssen, dass wir nicht erkennen noch.
InformationsquelleAutor der Antwort OneNerd
Goto ist in Erster Linie beim schreiben von finite-state-machines. Beim Parsen von Kontext-freie Grammatik, die Sie wirklich brauchen eines. Obwohl, wir könnten Leben, ohne zu springen, wenn
continue $case;
ist eine gültige Anweisung innerhalb einer switch-block zu springen, um einen anderen Fall und natürlich mit Fall reicht, wie viele Sprachen heute. Bis dahin sind wir ziemlich viel stecken mit goto.InformationsquelleAutor der Antwort Dave Kok
Manchmal benutze ich
goto
zu vermeiden, mehrere geschachtelte ifs. Das ist nicht nur über die Logik, die Struktur oder das Programm fließen, manchmal geht es auch nur darum, wie der code aussieht.InformationsquelleAutor der Antwort Simøn
Wie gesagt, springen ist nur wirklich erforderlich in einigen Arten von algorithmen, in der Regel diejenigen, die in der Sprache der Analyse oder finite-state-machines. Ich habe nie verpasst das fehlen von goto in PHP.
OTOH, habe ich programmiert in einer Sprache, wo nur zwei Strukturen wurden Funktionen und bedingte gotos: SNOBOL4. Da die Gefahr von spaghetti-code war so hoch, die meisten SNOBOL4 Programmierer sind/waren Sie vorsichtig, um zu vermeiden, dass. Aber gotos ermöglichen, haben einige sehr enge Programmierung, kreative loop-Hinrichtungen und so weiter. Es ist tatsächlich etwas leichter zu machen, FSM-Typ Schleifen, wenn alles, was Sie haben, sind gotos.
InformationsquelleAutor der Antwort staticsan
Generierte code könnte machen Sie gute Verwendung von goto, ich denke. Die gute Sache über generierten code ist, brauchen Sie nicht zu pflegen, Sie nur zu regenerieren.
InformationsquelleAutor der Antwort demonkoryu
goto
sollte wirklich etwas sein, aber das war in der Sprache und wäre gemacht veraltet durch bessere Programmierung-Praktiken. Hinzufügen es jetzt scheint wie ein Rückschritt.InformationsquelleAutor der Antwort Rob Ryan
B große Vorteil von gotos ist die Lernkurve. Man fragt sich, warum tools wie visual studia und macs gut zu tun. Der Grund dafür ist, dass die Menschen wollen mehr als nur ein tolles Produkt, Sie wollen einen
tolles Produkt, dass Sie lernen können Sie in nur einer Stunde oder so. Viele Programmierer jetzt
ein Tage-Programm als eine Ihrer Arbeitsplätze. Ich sehe so viele Bücher, die sagen, dass sollte man nie
verwenden Sie goto und geben dann fünf oder so-Technologien, so dass Sie sagen, beseitigen jedes
diese brauchen. Ich sagen, dass gerade die Tatsache, dass Sie erwähnt 5 ist ein Beweis dafür, wie gut die springen
ist!!!!! Ich habe keine Zeit, um zu lehren, fünf Dinge, die zählen Ausnahme Strukturen, die
nehmen, ganze Kapitel zu erklären!!!!! wenn alles, was Sie wirklich brauchen, ist eine einfache goto,
erklärt werden kann in 30 Sekunden. Sicher, Sie können erstellen, schlechten code mit Ihnen, wenn die
Programmierer will--- aber hey, die meisten Programmierer, die nicht wollen, schlechten code zu schreiben und wenn Sie
Tat, Sie könnte sowieso. Die meisten gotos in unserem Labor gemacht, den code extrem einfach zu
verstehen und lernen; viel mehr als das Lesen eines 2000-seitigen Buch.
InformationsquelleAutor der Antwort james lamm
SPRINGEN, der eingeschränkte Steuerung der Ausführung Struktur, kann verwendet werden anstelle von Schleifen, aber das ist sehr stark davon abgeraten. Seine Verwendung neigt dazu, die Erstellung von unstrukturierten code, das ist eine schreckliche Praxis. Es ist wahrscheinlich am besten, wenn verwendet, nur in der Entwicklung, zum Debuggen (überspringen Sie große Mengen von code, um den Zugriff auf ein bestimmtes problem) und testen. Der einzige andere Zweck, für den SPRINGEN ist möglicherweise zum schreiben eines assembler; wahrscheinlich nicht. SPRINGEN, wenn außerhalb der Entwicklung, sollten sparsam verwendet werden und nur als letzten Ausweg. Wenn möglich, ersetzen Sie die GOTO-Funktion mit einem gültigen loop-Struktur.
Als für den verlinkten thread im letzten (GOTO-Befehl in PHP?):
Wie gesagt um Ishmaeel (herausgegeben von Gordon; mit Abstand die beste Antwort):
GOTO ist einfach nur eine ausgedehnte PAUSE, mit der Möglichkeit, "statische Beschriftungen".
"Grundsätzlich wird es sein, die Verbesserung der Fähigkeit zu brechen out von verschachtelten if-Anweisungen."
InformationsquelleAutor der Antwort TopHatPrdxns115
Die kurze Antwort ist goto ist ein workaround für eine begrenzte stack-Speicher eine viel bessere Leistung in single-threaded-code. Andere als Adressierung von stack-Speicherplatz oder Leistung, die seine Verwendung wäre zumindest unnötig und unangemessen, weil es bewirkt, dass unnötige Komplexität.
In über 2 Millionen Zeilen code, den ich geschrieben habe, in allen Sprachen, ohne Maschinencode :-). Nur zweimal hat seinen Einsatz nicht notwendig wurde und sowohl durch die Inspektion\ - Sortierung großer Baum datasets.
InformationsquelleAutor der Antwort Joe Perkins