Goto Befehl?
Steffen
- php
Hallo!
Gibt es in PHP so was wie einen Goto Befehl. Will ne Variable abfragen und wenn die einen bestimmten Wert hat, möchte ich im Script ein paar Zeilen zurück springen.
Ist das möglich?
Gruß
Steffen
hi,
Gibt es in PHP so was wie einen Goto Befehl. Will ne Variable abfragen und wenn die einen bestimmten Wert hat, möchte ich im Script ein paar Zeilen zurück springen.
Ist das möglich?
nein.
goto ist sowieso ein ziemlich verpöhntes sprachkonstrukt, weil es spaghetti-code mit wildem hin- und herspringen fördert.
und deshalb gibt es das in PHP auch nicht. zumal PHP ja weder zeilennummern noch marken kennt - es gibt als gar nichts, wo du _hin_ springen könntest.
du musst dein problem irgendwie anders lösen - eine detailiertere beschreibung wäre dazu sicher hilfreich, um dir mehr tipps geben zu können.
gruß,
wahsaga
Ich lasse mir eine Zufallszahl generieren. Danach prüf ich, ob diese Zahl schon mal in einer Tabelle vorhanden ist. Wenn das der Fall sein ist, soll eine neue Zahl generiert werden und wieder überprüft werden, bis keine Übereinstimmung mehr da ist.
sprung:
srand((double)microtime()*1000000);
$test = rand();
$res_control = mysql_query("SELECT * FROM test WHERE id='$test'");
$num_control = mysql_num_rows($res_control);
if ($num_control != "0") goto sprung;
So hatte ich mir das vorgestellt. Aber es geht ja nicht. Vielleicht hat jemand eine Idee.
Gruß
Hi ,
Ich lasse mir eine Zufallszahl generieren. Danach prüf ich, ob diese Zahl schon mal in einer Tabelle vorhanden ist. Wenn das der Fall sein ist, soll eine neue Zahl generiert werden und wieder überprüft werden, bis keine Übereinstimmung mehr da ist.
Hast Du schonmal etwas von Schleifen gehört? M.E. wäre while ziemlich sinnvoll.
http://de2.php.net/manual/de/control-structures.while.php
ciao
romy
hi,
Hast Du schonmal etwas von Schleifen gehört? M.E. wäre while ziemlich sinnvoll.
http://de2.php.net/manual/de/control-structures.while.php
dabei aber bitte unbedingt noch eine andere abbruchbedingung einbauen (z.b. x erfolglose versuche).
wenn es nämlich durch "zufall" mal vorkommt, dass keine "neue" zahl erzeugt wird, hängt man sonst in einer endlosschleife fest.
gruß,
wahsaga
Hello,
Hast Du schonmal etwas von Schleifen gehört? M.E. wäre while ziemlich sinnvoll.
http://de2.php.net/manual/de/control-structures.while.phpdabei aber bitte unbedingt noch eine andere abbruchbedingung einbauen (z.b. x erfolglose versuche).
wenn es nämlich durch "zufall" mal vorkommt, dass keine "neue" zahl erzeugt wird, hängt man sonst in einer endlosschleife fest.
Sooo endlos wird die ja bei PHP glücklicherweise nicht, wenn man nicht an der Ini rumgemacht hat. Nach typisch 30sec. greift das Runtime mit einem Timeout ein.
Wenn man natülich eine ältere PHP-Version benutzt und in der Schliefe sleep() verwendet, dann wird das Timeout dadurch außer Kraft gesetzt. Ich glaube, ab 4.3.5 ist dieder Bug behoben.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Manchmal steht man aber auch auf dem Schlauch.
Hätt ich auch selber drauf kommen können. :-)
Danke.
Hello,
goto ist sowieso ein ziemlich verpöhntes sprachkonstrukt, weil es spaghetti-code mit wildem hin- und herspringen fördert.
und deshalb gibt es das in PHP auch nicht. zumal PHP ja weder zeilennummern noch marken kennt - es gibt als gar nichts, wo du _hin_ springen könntest.
Aber so ganz nach Nassi Sniderman ist es auch nicht gebaut *g*
Man kann zumindest auf Funktionen mittels Return an jeder beliebigen Stelle aus dem Funktionsblock in die Übergeordnete Ebene zurück_springen_
Dabei werden dann gerne Lost Handles und vergessene Unlocks produziert ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi!
Gibt es in PHP so was wie einen Goto Befehl. Will ne Variable abfragen und wenn die einen bestimmten Wert hat, möchte ich im Script ein paar Zeilen zurück springen.
Ist das möglich?
Es gab kürzlich eine sehr lange Diskussion auf php-dev, ob man einen goto-Operator aufnehmen sollte, AFAIK hat sogar jemand ein patch dafür geschrieben. In diesem Thread sind auch mehrere Methoden erklärt, wie man dieses Verhalten ohne goto abbilden kann:
http://marc.theaimsgroup.com/?t=109106735500003&r=1&w=2
http://www.zend.com/zend/week/week195.php#Heading7
Ich habe das am Ende nicht mehr alles verfolgt, waren glaube ich 240 Postings, aber das Problem war wohl, dass Anfänger mit goto ein Sprachkonstrukt an die Hand bekomen, mit dem man sich wunderbar selbst in den Fuß schießen kann, auf der anderen Seite ist es für erfahrende Entwickler in sehr seltenen Situationen hilfreich (z.B. Parserbau).
Grüße
Andreas
Hello,
Es gab kürzlich eine sehr lange Diskussion auf php-dev, ob man einen goto-Operator aufnehmen sollte, AFAIK hat sogar jemand ein patch dafür geschrieben. In diesem Thread sind auch mehrere Methoden erklärt, wie man dieses Verhalten ohne goto abbilden kann:
http://marc.theaimsgroup.com/?t=109106735500003&r=1&w=2
http://www.zend.com/zend/week/week195.php#Heading7
Bevor die so einen Blödsinn[tm] einbauen, sollten sie lieber erstmal die Hamonisierung von flock() und dio_open() / dio_fctl() vornehmen. Wenn eine Datei mandatory geöffnet und gesperrt wird, und man versucht dann, dieselbe mit flock(* + LOCK_NB) zu sperren, dann wartet sich das flock trotzdem einen Wolf. Es müsste aber mit einem Fehler abbrechen, da Nonblocking Mode angefordert wurde.
Aber angeblich ist das ja kein Bug, sondern ein Feature *gg*
Harzliche Grüße aus http://www.annerschbarrich.de
Tom