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