2011-01-16 9 views

Antwort

1

Wenn Sie schreiben:

function a(){ $variable= 'random string'; } 

Sie die Funktion a definieren. Zu keinem Zeitpunkt Ihres Snippets wird eine Funktion aufgerufen. Um es zu nennen, würden Sie brauchen:

function a(){ $variable= 'random string'; } 
a(); 

oder

a(); 
function a(){ $variable= 'random string'; } 

(der Punkt, an dem die Funktion definiert ist irrelevant ist)

Im Allgemeinen ist die Art und Weise „gehen zurück zum Anfang "wäre goto zu verwenden (dies erfordert PHP 5.3):

start: 
//do stuff 
goto start; 

Wenn Sie nicht definieren Funktionen oder Bedingung der Definitionen, können Sie auch tun:

Sie sollten jedoch beachten, dass alle Änderungen des Staates (z. schreiben Sie an Globals) wird nicht zurückgespult, indem Sie irgendetwas davon tun. Sie sollten auch darauf achten, keine Endlosschleife zu verursachen.

+2

Ich rieche einen PHP-Crash auf :) – RobertPitt

+1

auch, werden Sie nicht in der Lage, Ihre Funktionen neu zu definieren. – RobertPitt

+0

@Rob Guter Punkt, ich werde die Antwort korrigieren. – Artefacto

0

PHP ist nicht Threading, so dass Sie den Prozess nicht erneut aus dem Prozess initiieren können, gibt es einen Hack, um dies zu tun, aber Sie müssen den Prozess schließen und senden Sie den outout, dann lassen Sie den Browser Ihren Prozess neu starten.

if(file_exists($variable)) 
{ 
    header("Location: " . $_SERVER["PHP_SELF"]); 
    exit; 
} 

Sie können auch Loop-Check alle 1 Sekunden laufen, aber das hängt davon ab, ob die obige Logik für jeden Check-in erforderlich ist.

Dies würde jede Sekunde für 10 Sekunden überprüfen, sonst wird es beendet.

+0

Was ist es mit Menschen und unten stimmberechtigten gültigen Beiträge heute, habe ich etwas verpasst? – RobertPitt

+0

Nun, PHP-Code muss nicht in einem Browser ausgeführt werden. CLI ist eine weitere Möglichkeit, PHP-Code auszuführen. (Ich habe Sie nicht downvote) – Lekensteyn

+0

Es war nicht meiner, aber die Verwendung von '$ _SERVER ['REQUEST_URI']' wäre genauer (würde sogar die Abfragezeichenfolge enthalten). – Artefacto

0

Gibt es einen Grund, warum Sie nicht einfach Funktion a und Funktion b aus einer Unterfunktion aufrufen können?

function doit() 
{ 
    a(); 
    b(); 

    if(file_exists($variable)){ 
     //stop executing and start over again from function a; 
     doit(); //this is the important bit. 
    } 
    else 
    { 

    c(); 
    d(); 
    } 
} 
0

Was Sie beschrieben haben, ist eine klassische while Schleife:

$keep_going = true; 

while($keep_going) { 
    function a(){ $variable= 'random string'; } 
    function b(){ do something} 

    $keep_going = file_exists($variable); 
} 

function c(){ do something } 
function d(){do something } 

Beachten Sie, dass 'random string' müßten unterschiedliche jede Iteration sein, sonst werden Sie in einer Endlosschleife stecken.

Sie werden auch in einer Endlosschleife hängen bleiben, wenn alle möglichen Kombinationen von 'random string' aufgebraucht sind, aber es ist wahrscheinlich, dass Sie vor, dass lange ernst langsam Tiefen in Ihrer Anwendung erhalten werden, als wenn eine Menge der möglichen Kombinationen sind In Verwendung kann es eine große Anzahl von Iterationen dauern, bevor 'random string' eine Kombination findet, die nicht verwendet wird.

Sie könnten einige dieser Probleme vermeiden, indem Sie eine sequenzielle Zählervariable anstelle einer zufälligen Zeichenfolge verwenden.

0

Eine andere Lösung:

while(1) 
{ 
    // ... code ... 
    a(); 

    if (file_exists($variable)) 
    { 
     continue; 
    } 

    // ... code ... 
    b(); 
} 

Aber denken Sie daran irgendwo Pause die Schleife.

0
<?php 

    function a(){ 
     $variable = "random string"; 
     return $variable; 
    } 

    do{ 
     $variable = a(); 
    }while (file_exists($variable)); 

    // do the rest of the process; 

    function b(){ 
     // do something; 
    } 

    b(); 
?> 

Vor allem $variable hat keinen Raum auf file_exists($variable) in Ihrem Code. Sie müssen den Wert zurückgeben oder global aufrufen.

dann führen Sie es durch eine do..while Schleife.

Hoffe das löscht Ihr Problem!

Verwandte Themen