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?
Ü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.
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).
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.
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?
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.)
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.
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.
Tags und Links php infinite-loop