PHP:仅在每次检查变量后运行函数

时间:2012-10-01 04:30:23

标签: php switch-statement

我有一系列我想要运行的功能。在每个函数的末尾,它设置变量TRUE或FALSE。如果变量设置为TRUE,我想要做的是打破系列。

例如。我有以下内容:

$done = false;

step1(); // Sets $done to false
step2(); // Sets $done to false
step3(); // Sets $done to true
step4(); // Because step3() set $done to true, I wan't step4() to NOT run.

当然如果step3()返回false,我想继续运行step4()。

我知道我需要使用一段时间,切换和/或休息。我不清楚如何设置它。

非常感谢。

5 个答案:

答案 0 :(得分:1)

我不太清楚,但如果你的功能返回布尔值,你可以尝试:

step1() || step2() || step3() || step4();

如果第一个操作数为false,则运算符||仅计算第二个操作数。

答案 1 :(得分:0)

如果需要,可以使用简单的if语句来完成。

$done = false;
$done = step1();  // each function returns true or false
if (!$done)
     {
      $done = step2();
     }
if (!$done)
     {
      $done = step3();
     }
if (!$done)
     {
      $done = step4();
     }

如果有任何错误,请纠正我。

答案 2 :(得分:0)

    $done = false;

function step1($done){
    if($done===false){
        //proceed step 2
    }
    else{
        return;
    }
}
function step2($done){
    if($done===false){
        //proceed step 3
    }
    else{
        return;
    }
}
function step3($done){
    if($done===false){
        //proceed step 4
    }
    else{
        return;
    }
}
function step4($done){
    if($done===false){
        //finish
    }
    else{
        return;
    }
}

答案 3 :(得分:0)

你的问题不是很直接,可能与你目前的形式相似。

您可以创建一个包含函数回调的数组,并在$donefalse时使用它们,并且仍然需要使用函数:

$doFunctions = ['step1', 'step2', ... , 'stepN'];
$done = false;

while (!$done && $doFunctions)
{
    $function = array_shift($doFunctions);
    call_user_func($function);    
}

如图所示,不需要switchbreak,因为这里有一个简单的条件。

另一个替代方法是“make”函数通过将其包装在闭包内并将$done作为引用(context)保留,然后返回它来返回一些东西:

$done = false;
$call = function ($function) use (&$done) {
    $function();
    return $done;
}

$call('step1')
    || $call('step2') 
    || $call('step3') 
    || $call('step4')
;

这取决于你实际需要实现的目标。

答案 4 :(得分:0)

所以也许我的问题被误解了,但过了一段时间后我意识到一个异常的try / catch块正是我所追求的。这大致是我最终做的事情。

首先,我设置我的函数以在错误上抛出异常。

function step1() {
    // do awesome stuff
    if ($errorInStep1) {
        throw new Exception('There was an error in step 1.');
    }
}

function step2() {
    // do awesome stuff
    if ($errorInStep2) {
        throw new Exception('There was an error in step 2.');
    }
}

function step3() {
    // do awesome stuff
    if ($errorInStep3) {
        throw new Exception('There was an error in step 3.');
    }
}

function step4() {
    // do awesome stuff
    if ($errorInStep4) {
        throw new Exception('There was an error in step 4.');
    }
}

现在,如果每个函数都有错误,脚本将抛出异常。

然后我将这些函数包装在try / catch块中。该脚本将尝试遍历每个语句,如果抛出异常......它将在那里停止。完美。

try {
    step1();
    step2();
    step3();
    step4();
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}