@ The Scout
Warum sollte ich denn auf GOTO verzichten? Gibt es dafür triftige Gründe, außer der Gefahr einer Endlosschleife? Die kann auch anders zustande kommen.
GOTO ist mit Abstand einer der wichtigsten Befehle jeder Programmiersprache. Darüber hinaus ist GOTO auch einer der Befehle, die eine Programmiersprache erst zu einer machen. Alles was keine Sprungmarken unterstützt, ist also keine Programmiersprache. Folglich war PHP bis 2009 nur eine Skriptsprache und KEINE Programmiersprache.
Es gibt viele Dinge die man ohne GOTO gar nicht machen kann. Man kann zwar zugegeben viele Zeilen Quelltext mit "IF ... ELSE" isolieren, aber dadurch wird jedes Programm extrem langsam, weil der Interpreter erst die Bereiche der Klammern analysieren muss.
"DO", "WHILE" und "UNTIL" können zwar auch einen Programmteil immer wieder ablaufen lassen, wenn es diese Befehle auch in PHP geben sollte, aber GOTO ist bei größeren Anwendungen teilweise unverzichtbar.
Auszug aus der Fachliteratur zu "GOTO" (Zitat):
"In der Praxis hat sich jedoch gezeigt, dass der Verzicht auf GOTO zwar möglich ist, jedoch in einigen Fällen zu sehr aufwändigen Konstrukten führt. So hält der US-amerikanische Informatiker Professor Donald E. Knuth, GOTO für die optimale Lösung einiger üblicher Programmierprobleme. Besonders in zeitkritischen Programmteilen, ist ein GOTO deutlich effizienter als am Ende von mehreren geschachtelten Schleifen, jeweils eine Abbruchprüfung durchzuführen."
Ich persönlich freue mich übrigens schon auf die Einführung von Unterprogrammen mit "GOSUB ... RETURN" in PHP, falls die mal kommen sollte... Das läuft nämlich erheblich schneller ab als Funktionen.
Eben mit "Visual Basic" (Excel) getestet:
Eine Variable wird eine Milliarde Mal mit ihrem eigenen Wert überschrieben. Gezählt wird mit einer FOR-NEXT-Schleife. Der Aufruf mit der Variable wurde zuerst über GOSUB mit einer Sprungmarke durchgeführt und anschließend mit einer Funktion.
GOSUB: 27 Sekunden
FUNKTION: 56 Sekunden
Das Ergebnis ist eindeutig: Die Funktion braucht deutlich länger als GOSUB. Das sollte eigentlich auf jede Programmiersprache zutreffen. Ich kann mein Experiment ja gerne mal mit PHP wiederholen. Zweimal GOTO anstelle einer Funktion.
Nachtrag von 21:37 Uhr:
Es bleibt dabei: Funktionen sind auch in PHP langsamer. Sogar noch ERHEBLICH langsamer! Ich habe den Test mit 4 Millionen Durchläufen gefahren, weil mein Server für ein PHP nur eine Ablaufzeit von maximal 30 Sekunden zulässt. Die FOR-Schleife musste ich durch IF-GOTO ersetzen.
Ergebnis:
2 x GOTO anstelle "GOSUB ... RETURN": 1 Sekunde
FUNKTION: 26 Sekunden