停止执行并返回开始

时间:2011-01-16 15:37:34

标签: php

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


a();


if(file_exists($variable)){
 stop executing and start over again from function a;
}

function b(){ do something }


b();

问题:如何停止脚本并告诉它重做整个过程,返回功能并运行。

6 个答案:

答案 0 :(得分:1)

当你写:

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

您正在定义函数a。您的代码段中没有任何一个函数被调用。要打电话,你需要:

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

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

(定义函数的点无关紧要)

一般来说,回到开头的方式&#34;将使用goto(这需要PHP 5.3):

start:
//do stuff
goto start;

如果您没有定义任何功能或调整定义,您也可以这样做:

if (!function_exists('a')) {
    function a() {}
}
//do stuff
include __FILE__;

但是,您应该注意,任何状态的更改(例如写入全局变量)都不会通过执行任何操作而重绕。你也应该注意不要造成无限循环。

答案 1 :(得分:0)

PHP没有线程,所以你不能在进程中再次启动进程,有一个hack这样做但你必须关闭进程并发送outout,然后你让浏览器重新启动你的进程。 / p>

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

你也可以循环检查每1秒运行一次,但这取决于每次检查是否需要上述逻辑。

$sts = time();
while(!file_exists($variable))
{
    if($sts < timestamp()-10)
    {
        exit;
    }
    sleep(1);
}

这将检查每秒10秒,否则它将退出。

答案 2 :(得分:0)

是否有理由不能从子功能中调用函数a和函数b?

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();
   }
}

答案 3 :(得分:0)

您所描述的是经典的while循环:

$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 }

请注意,'random string'每次迭代都需要不同,否则您将陷入无限循环。

如果'random string'的所有可能组合都用尽了,你也会陷入无限循环中,但很可能你的应用程序在此之前很久就会出现严重的减速,好像很多正在使用可能的组合,在'random string'找到未使用的组合之前,可能需要进行大量迭代。

您可以使用顺序计数器变量而不是随机字符串来避免其中一些问题。

答案 4 :(得分:0)

另一种解决方案:

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

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

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

但请记住在某处打破循环。

答案 5 :(得分: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();
?>

首先,$variable在您的代码中file_exists($variable)没有范围。你需要返回值或将其称为全局值。

然后通过do..while循环运行它。

希望这能解决你的问题!