Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 停止执行并返回开始_Php - Fatal编程技术网

Php 停止执行并返回开始

Php 停止执行并返回开始,php,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(); 您正在定义函数a。在代码段中没有调用任何函数。要调用它,您需要: function a(){ $variable= '

当您编写时:

<?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();
您正在定义函数
a
。在代码段中没有调用任何函数。要调用它,您需要:

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

(定义函数的点不相关)

一般来说,“回到开头”的方法是使用
goto
(这需要PHP5.3):

如果未定义函数或条件定义,还可以执行以下操作:

start:
//do stuff
goto start;

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

PHP没有线程化,因此您无法从进程内再次启动进程,有一个黑客可以这样做,但您必须关闭进程并发送输出,然后让浏览器重新启动进程

if (!function_exists('a')) {
    function a() {}
}
//do stuff
include __FILE__;
您也可以循环检查以每1秒运行一次,但这取决于每次检查是否需要上述逻辑

if(file_exists($variable))
{
    header("Location: " . $_SERVER["PHP_SELF"]);
    exit;
}
$sts=time();
当(!file_存在($variable))时
{
如果($sts

这将在10秒钟内每秒检查一次,否则它将退出。

是否有原因不能从子函数调用函数a和函数b

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

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

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();
   }
}
请注意,
'random string'
每次迭代都需要不同,否则您将陷入无限循环

如果
“随机字符串”
的所有可能组合都用完了,你也会陷入无限循环,但在此之前,你的应用程序可能会出现严重的减速,好像有很多可能的组合正在使用中,在
'random string'
找到未使用的组合之前,可能需要大量迭代

通过使用顺序计数器变量而不是随机字符串,可以避免这些问题。

另一种解决方案:

$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 }
但请记住在某个地方打破循环。


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

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

    // ... code ...
    b();
}
首先,
$variable
在您的代码中不存在($variable)
文件上没有作用域。您需要返回该值或将其称为全局值

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


希望这能解决你的问题

我闻到php崩溃的味道:)而且,你将无法重新定义你的函数。是的,想想看,如果他使用的是一个框架,那么对类、函数、常量等进行如此多的检查是不健康的。今天人们和投票否决有效帖子的原因是什么,我错过了什么吗,PHP代码不必在浏览器中运行。CLI是执行PHP代码的另一种可能性。(我没有否决你的意见)这不是我的,但使用
$\u SERVER['REQUEST\u URI']
会更准确(甚至会包括查询字符串)。是的,但80%是在浏览器中运行的,因此这是一个有效的假设。如果他希望更改重定向的值,他会提出请求,我很乐意根据他的情况帮助他。使用我的方法,浏览器将在一定次数的尝试后停止执行重定向功能,如果没有,他可以合并会话来跟踪请求。
$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 }
while(1)
{
    // ... code ...
    a();

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

    // ... code ...
    b();
}
<?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();
?>