Wann sind Endlos-Schleifen in PHP nützlich?

7

Beim Lesen der großartigen PHP Tutorials von Paul Hudson sagte er

  

Vielleicht überraschend, endlose Schleifen   kann manchmal hilfreich sein   Skripte. Als Endlosschleifen nie   ohne äußeren Einfluss beenden,   Die beliebteste Art, sie zu benutzen, ist es,   aus der Schleife ausbrechen und / oder austreten   Skript vollständig aus der Schleife   wann immer eine Bedingung übereinstimmt. Sie   kann sich auch auf Benutzereingaben verlassen   Beende die Schleife - zum Beispiel wenn   Sie schreiben ein Programm zum Akzeptieren   Leute, die so lange Daten eintippen   Sie wollen, es würde einfach nicht funktionieren   habe die Skriptschleife 30.000 mal oder   sogar 300.000.000 mal. Stattdessen   Der Code sollte für immer und ewig laufen   Annahme von Benutzereingaben bis zum Benutzer   beendet das Programm durch Drücken von Strg-C.

Würdest du mir bitte ein einfaches Beispiel dafür geben, wie man Endlosschleifen in PHP verwendet?

    
taabouzeid 19.11.2009, 19:01
quelle

12 Antworten

15

Überwachen von Anwendungen

Wenn Sie einen Hintergrundprozess haben, der den Status Ihrer Server überwacht und bei Problemen eine E-Mail sendet. Es würde eine Endlosschleife haben, um die Server wiederholbar zu überprüfen (mit einer Pause zwischen den Iterationen).

Server, der auf Clients hört

Wenn Sie ein Server-Skript haben, das auf einen Socket auf Verbindungen wartet, wird es endlos durchlaufen und blockiert, während es darauf wartet, dass neue Clients eine Verbindung herstellen.

Videospiele

Spiele haben normalerweise eine "Spielschleife", die einmal pro Frame läuft, auf unbestimmte Zeit.

Oder ... alles andere, was mit regelmäßigen Überprüfungen im Hintergrund weiterläuft.

    
Ben S 19.11.2009, 19:04
quelle
5

Wenn Sie einen Socket-Server implementiert haben (aus: Ссылка ):

%Vor%     
AJ. 19.11.2009 19:04
quelle
3

Vielleicht ist es nützlich, wenn Sie eine Kommandozeilen-PHP-Anwendung schreiben? Denn wenn PHP-Skripte auf Webservern laufen (Apache oder andere), ist ihre Lebensdauer standardmäßig auf 30 Sekunden begrenzt (oder Sie können dieses Limit manuell in der Konfigurationsdatei ändern).

    
Sergey Kuznetsov 19.11.2009 19:05
quelle
2

Ich stimme den anderen Antworten bisher nicht zu und schlage vor, dass, wenn Sie vorsichtig mit Dingen sind, sie nie einen Platz haben.

Es gibt immer einige Bedingungen, in denen Sie herunterfahren wollen, also sollte es zumindest while sein ( test, wenn shutdown nicht angefordert wird ) oder while ( immer noch sinnvoll run )

Ich denke, dass es praktisch Zeiten gibt, in denen die Leute die Bedingung nicht verwenden und sich auf Dinge wie signt verlassen, um php zu beenden, aber das ist meiner Meinung nach keine Best Practice, selbst wenn es funktioniert.

Das Risiko, den Test innerhalb der Schleife zu platzieren und zu brechen, wenn er fehlschlägt, ist, dass der Code in Zukunft leichter geändert werden kann, um versehentlich eine Endlosschleife zu erstellen. Zum Beispiel könnten Sie den Inhalt der while-Schleife in eine andere Schleife umbrechen, und dann bringt Sie die break-Anweisung plötzlich nicht aus der while ...

für (;;) oder while (1) sollte nach Möglichkeit vermieden werden, und es ist fast immer möglich.

    
Daniel Papasian 19.11.2009 19:36
quelle
2

Es gibt viele Möglichkeiten, Endlosschleifen zu verwenden, hier ist ein Beispiel für eine Endlosschleife, um 100 Zufallszahlen zwischen 1 und 200 zu erhalten

%Vor%     
Jake 07.03.2015 04:40
quelle
1

Endlosschleifen sind besonders nützlich beim Erstellen von Befehlszeilenanwendungen. Die Anwendung wird dann ausgeführt, bis der Benutzer es anweist, zu stoppen. (Fügen Sie eine break / exit-Anweisung hinzu, wenn die Benutzereingabe zum Beispiel "quit" ist)

%Vor%     
Hanse 19.11.2009 21:05
quelle
0

Ich denke über das "rate-the-number" -Spiel nach, bei dem der Nutzer die zufällig generierte Zahl erraten muss, also muss er Zahlen eingeben, bis er sie bekommt. Brauchst du das?

    
Soufiane Hassou 19.11.2009 19:04
quelle
0

Paul Biggar hat ein Skript für LaTeX-Projekte erstellt verwendet eine Endlosschleife, um im Hintergrund zu laufen und versucht ständig, die LaTeX-Quellen neu zu erstellen.

Die einzige Möglichkeit, das Skript zu beenden, besteht darin, es extern zu beenden (z. B. mit Strg + C ).

(Zugegeben, nicht PHP (eigentlich Bash), aber dasselbe Skript könnte auch in PHP implementiert werden.)

    
Konrad Rudolph 19.11.2009 19:08
quelle
0

Für Benutzereingabe ...

%Vor%     
gahooa 19.11.2009 19:12
quelle
0

Manchmal ist anstelle einer Schleife, deren Ausgangsbedingung zu lange ist, um die Lesbarkeit zu erhalten, eine falsch benannte "unendliche" Schleife der beste Weg.

%Vor%     
ZJR 19.11.2009 19:16
quelle
0

Ich denke, dass ein Punkt verpasst wird ... es gibt nicht wirklich unendliche Schleifen (Sie würden für immer in ihnen stecken), eher while(true){...} und co sind nützlich, wenn Sie nicht triviale Ausgangsbedingungen haben (zB solche, die von eine Bibliothek eines Drittanbieters oder ein Limit, das viel Zeit für die Berechnung benötigt, aber inkrementell innerhalb der Schleife oder etwas, das auf Benutzereingaben beruht, erstellt werden kann.

Es sollte nicht überraschend sein, dass nicht jede Schleife präzise als for , while oder do Schleife angegeben werden kann, ohne break zu verwenden.

    
jheriko 19.11.2009 20:20
quelle
0

Unendliche Schleifen sind eines dieser Werkzeuge, die Sie in einer separaten Toolbox aufbewahren, die nicht viel geöffnet wird, da sie ein Werkzeug der (fast) letzten Möglichkeit ist.

Die beste Verwendung, die ich für sie gefunden habe, ist mit Zustandsautomaten oder Schleifen, die sich Zustandsautomaten nähern. Dies liegt daran, dass die Beendigungsbedingung normalerweise ziemlich komplex ist und nicht am Anfang oder Ende der Schleife platziert werden kann.

    
staticsan 20.11.2009 01:48
quelle

Tags und Links