PHP:仅在每次检查变量后运行函数
我有一系列我想运行的函数。在每个函数的末尾,它要么设置变量TRUE,要么设置变量FALSE。我想做的是,如果变量设置为TRUE,则中断序列 比如说。我有以下资料:PHP:仅在每次检查变量后运行函数,php,switch-statement,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 st
$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()
我知道我需要使用一段时间、切换和/或休息。我只是不清楚如何设置这个
非常感谢。我不太清楚,但如果您的函数返回布尔值,您可以尝试:
step1() || step2() || step3() || step4();
运算符
|
仅在第一个操作数为false时计算第二个操作数。如果需要,可以使用一个简单的if
语句
$done = false;
$done = step1(); // each function returns true or false
if (!$done)
{
$done = step2();
}
if (!$done)
{
$done = step3();
}
if (!$done)
{
$done = step4();
}
如果有任何错误,请纠正我。您的问题不是很直截了当,可能与您目前的形式类似
$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;
}
}
您可以创建一个包含函数回调的数组,并在$done
为false
且仍有函数要使用时使用它们:
$doFunctions = ['step1', 'step2', ... , 'stepN'];
$done = false;
while (!$done && $doFunctions)
{
$function = array_shift($doFunctions);
call_user_func($function);
}
如图所示,不需要开关
和中断
,因为这里有一个简单的条件
另一种选择是通过将函数包装在闭包中来“使”函数返回某些内容,并将$done
作为引用(上下文),然后返回:
$done = false;
$call = function ($function) use (&$done) {
$function();
return $done;
}
$call('step1')
|| $call('step2')
|| $call('step3')
|| $call('step4')
;
这在一定程度上取决于您实际需要实现的目标。因此,也许我的问题被误解了,但过了一段时间,我意识到,带异常的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";
}
谢谢@Tassovan,很高兴知道。然而,这不起作用的原因是函数本身不返回任何内容。是否继续需要取决于外部变量。然而,知道这一点……我当然可以调整它,使其像您所展示的那样工作。谢谢,谢谢@Shabeer。这就是我现在运行它的方式。实际应用程序比我在示例中给出的要复杂一些,这使得一系列if语句非常混乱。必须有一个更干净的方法。你可以通过一个函数名数组和一个call\u user\u func循环来改进这个方法。只要做一个
如果
测试,在所需的停止条件下中断循环,$done==true
。