2

所以我有一个数组,其中包含所有用于检查表单输入的函数调用。然后,我在数组中进行了一个 foreach 循环,以查看验证函数的返回值是真还是假。根据该结果,foreach 所在的函数返回真或假。我试图弄清楚的问题是,如果所有验证函数都返回 true,如何只返回一次 true。

这是我的代码:

public function valInputs()
{
    $valArray = array(
        valName($firstName),
        valName($lastName),
        valPhone($phone),
        valEmail($email)
    ); // these functions return true/false depending on validation

    foreach($valArray as $value)
    {
        if(!$value)
        {
            return false;
            break;
        }
        else
        {
           return true; // the problem is, true gets returned X number of times
        }
    }
}

关于如何避免多次返回的任何想法?感谢您的任何帮助。

4

4 回答 4

13

返回调用停止 foreach 循环和函数。实际上,您可以在循环下方返回 true:

foreach($valArray as $value)
{
    if(!$value)
    {
        return false;
        // break is not needed, and should NOT be used in this case,
        // as it stops the foreach loop.
        // It will never be reached anyways, seeing how you return false just above.
    }
}
return true;

如果它到达循环的末尾,则意味着它没有返回 false。因此它应该返回 true。

于 2012-09-20T20:45:14.677 回答
4

一个有趣的方法是

public function valInputs()
{
    $valArray = array(
        valName($firstName),
        valName($lastName),
        valPhone($phone),
        valEmail($email)
    ); // these functions return true/false depending on validation

return array_product( $valArray ) === 1; 
}
于 2012-09-20T20:57:57.890 回答
3

为什么不只是:

public function valInputs() {
    return (valName($firstName) && valName($lastName) && valPhone($phone) && valEmail($email));
}

如果它们都为真,这将返回真,如果其中至少一个为假,则返回假。坦率地说,我不确定你为什么需要一个 foreach 循环。

于 2012-09-20T21:03:01.700 回答
0

根据定义,return 结束函数。您不能多次返回。

查看 pst 的评论,检查您是否多次调用该函数。

于 2012-09-20T20:43:03.380 回答