我有一系列我想要运行的功能。在每个函数的末尾,它设置变量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()。
我知道我需要使用一段时间,切换和/或休息。我不清楚如何设置它。
非常感谢。
答案 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)
你的问题不是很直接,可能与你目前的形式相似。
您可以创建一个包含函数回调的数组,并在$done
为false
时使用它们,并且仍然需要使用函数:
$doFunctions = ['step1', 'step2', ... , 'stepN'];
$done = false;
while (!$done && $doFunctions)
{
$function = array_shift($doFunctions);
call_user_func($function);
}
如图所示,不需要switch
和break
,因为这里有一个简单的条件。
另一个替代方法是“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";
}