2

したがって、フォームの入力をチェックするためのすべての関数呼び出しを含む配列があります。次に、配列に対して foreach ループを実行して、検証関数からの戻り値が true か false かを確認します。その結果に応じて、foreach が入っている関数は true または false を返します。私が理解しようとしている問題は、すべての検証関数が 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
        }
    }
}

true を複数回返さないようにする方法についてのアイデアはありますか? 助けてくれてありがとう。

4

4 に答える 4

13

return 呼び出しは 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));
}

すべてが true の場合は true を返し、少なくとも 1 つが false の場合は false を返します。率直に言って、なぜそこに foreach ループが必要なのかわかりません。

于 2012-09-20T21:03:01.700 に答える
0

定義上、return は関数を終了します。何度も戻ることはできません。

pst のコメントを見て、その関数を複数回呼び出しているかどうかを確認してください。

于 2012-09-20T20:43:03.380 に答える