Php 有没有一种;“有条件回报”;

Php 有没有一种;“有条件回报”;,php,function,return,conditional-statements,Php,Function,Return,Conditional Statements,我正在编写一个函数,它调用其他函数,直到其中一个函数返回“notfalse”值。此值应由主函数返回。 重写此函数的最短方式是什么,这样它就不会调用其他函数两次,并且(如果可能的话)避免使用额外的变量 函数doSomething(){ if(tryA())返回tryA(); if(tryB())返回tryB(); if(tryC())返回tryC(); 返回螺钉IT(); } 只需在if测试中设置一个var,并在if主体中使用它作为返回值 function doSomething(){ i

我正在编写一个函数,它调用其他函数,直到其中一个函数返回“notfalse”值。此值应由主函数返回。 重写此函数的最短方式是什么,这样它就不会调用其他函数两次,并且(如果可能的话)避免使用额外的变量

函数doSomething(){
if(tryA())返回tryA();
if(tryB())返回tryB();
if(tryC())返回tryC();
返回螺钉IT();
}

只需在if测试中设置一个var,并在if主体中使用它作为返回值

function doSomething(){
    if ($ret = tryA()) return $ret;
    if ($ret = tryB()) return $ret;
    if ($ret = tryC()) return $ret;
    return screwIt();
}

您可以这样做:

函数doSomething(){
如果($tryA=tryA())返回$tryA;
if($tryB=tryB())返回$tryB;
如果($tryC=tryC())返回$tryC;
返回螺钉IT();
}

您可以使用三元运算符:

return tryA() ?: (tryB() ?: (tryC() ?: screwIt()));

如果要调用一组函数,可以将它们的名称存储在字符串数组中,并循环该数组以避免代码重复

function doSomething()
{
  $functions = array("tryA", "tryB", "tryC", "tryD", "tryE", "tryF");

  //                  v------------v----- This stops the loop on first non-falsy value found
  for ($i = $ret = 0; !(bool)$ret && $i < count($functions); $i++)
  {
      $ret = $functions[$i]();
  }

  return $ret ?: screwIt();
}

如果您只对逻辑值感兴趣,可以通过逻辑OR运算符简单地枚举它们:

return tryA() ?: (tryB() ?: (tryC() ?: screwIt()));
返回tryA()| | tryB()| | tryC()| | screwIt();
函数将从左到右调用,直到非空值。结果将被转换为
false
true

如果精确值有意义,请使用“三元”运算符的简化形式。像这样:

返回tryA()?:tryB()?:tryC()?:screwIt();

只有当tryA()可以解释为
false
(即0、null、、'0'或[])等时,它才会调用tryB()。

与RiggsFolly:)相比,您迟到了2分钟。这是一个有趣的方法。我可以看到函数列表可以很好地工作的情况。