退出for循环并输出echo

3
以下PHP代码按预期工作。当代码在4次尝试中无法执行命令时,我需要输出“复制错误”消息。
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++)
{
    $cloudcmd = "cp abc xyz ";
    system($cloudcmd,$status);
    if($status != 0)
    {
        sleep(3) ;
        continue ;
    }
    break ;
}

我尝试在break;之后添加echo命令,但似乎没有起作用。


在 break 之后,该语句不会执行。 - Suresh kumar
break 的整个意义在于它退出循环。执行永远不会到达它后面的那一行。 - JJJ
5个回答

2

严格来说,你不需要引入额外的变量和检查来完成这个操作。

简单来说,你可以在for循环之外检查for循环变量$num_tries的值:

if($num_tries==4)....

在for循环结束后,您还可以使用$status变量。
if($status!=0)....

1
$success = false;
for($num_tries = 0 ; $num_tries < 4 ; $num_tries++)
        {
        $cloudcmd = "cp abc xyz ";
        system($cloudcmd,$status);
        if($status != 0)
            {
            sleep(3) ;
            continue ;
            }
    $success=true;
    break ;
    }
if($success)
    {
    //do your thing
    }

为什么要使用变量?你不能直接将代码放在break之前吗(取代$success=true;的位置)? - JJJ
这就是我喜欢编程的方式。这样,如果需要多次给某个事情提供反馈,以表明其成功,我可以在代码中进一步重复使用变量。 - Tschallacka
3
为什么不使用状态变量? - John V.

1

请尝试执行以下操作:

for ($num_tries=0;$num_tries < 4;$num_tries++)
{
    system('cp abc xyz',$status);
    if ($status === 0)
    {
        break;
    }
    sleep(3);
}
if ($status !== 0)
{
    echo 'error';
}

这个循环将在$status为0时中断,这意味着system()调用成功。在循环之后,$status的值仍然可以访问(PHP没有块作用域),因此请检查它的值并在需要时进行输出。您可以使用exit()语句轻松替换echo语句,以停止脚本的其余部分。

我需要一些睡眠,忘记我提到的“基本缺陷”,我已经将其编辑掉了,由于某种原因,我似乎忽略了“continue;”语句。尽管如此,我认为我的建议是有效的,并且 -在我看来- 是一种更优雅的方法。 - Elias Van Ootegem

1
<?php  
for($num_tries = 1 ; $num_tries <=4 ; $num_tries++){  
    $cloudcmd = "cp abc xyz ";  
    system($cloudcmd,$status);  
    if($status != 0) {  
       if($num_tries!=4){  
         sleep(3);  
         continue;  
       } else {  
         echo "error";  
       }  
    }                               
    break;  
}
?>

0

break语句会导致循环中断,任何在break之后的代码都将被跳过。

也许你可以像这样做:

$success = false;

for($num_tries = 0 ; $num_tries < 4 ; $num_tries++) {

    if (success()) {
        // do something
        $success = true;
    }
}

echo ($success) ? 'Success' : 'Failure';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接