0

この関数は失敗します-

function check_required_fields($required_array) {
    $field_errors = array(); 
    foreach($required_array as $fieldname) {
        if ($fieldname == "date_expires_input") {
                if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) 
//print "here";
                    {
                    $field_errors[] = $fieldname;
                    }
                } if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname])))
                {
                $field_errors[] = $fieldname;
                }
            }
            return $field_errors; 
        }

しかし、「ここ」の印刷のコメントを外すと、機能します。(「ここ」は印刷されませんが)。一体何が起こっているのですか?!

4

3 に答える 3

4

もし、するなら

if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) 
   print "here";

次のブロックはifに依存しません。

したがって、コメントprint "here";を外すと、実際ifには次のコードブロックのを削除するだけです。

中かっこのインデントと一貫性に注意してください。この種のバグを回避するのに役立ちます。

于 2012-06-15T13:51:30.370 に答える
3

あなたの内なる条件は決して満たされません:

if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) ...

以前に1つのクロージャをすでに整理している限り、いっぱいになることはありません。

if ($fieldname == "date_expires_input") ...
于 2012-06-15T13:56:15.933 に答える
2

ステートメントprint "here";の中括弧内にないため、失敗します。ifこれにより、PHPはこの単一のステートメントをステートメントの本体と見なしifます。

次に、次の括弧で区切られたブロックが無条件に実行されます。基本的には以下のコードと同等になります

function check_required_fields($required_array) {
    $field_errors = array(); 
    foreach($required_array as $fieldname) {
        if ($fieldname == "date_expires_input") {
                if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" )
                {
                    // Inside the if statement
                    print "here";
                }
                // Outside the if statement
                $field_errors[] = $fieldname;
                } if (!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname])))
                {
                $field_errors[] = $fieldname;
                }
            }
            return $field_errors; 
        }
于 2012-06-15T13:53:36.917 に答える