<?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();
问题:如何停止脚本并告诉它重做整个过程,返回功能并运行。
答案 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
循环运行它。
希望这能解决你的问题!