删除注释行会破坏我的代码

时间:2012-06-15 13:49:23

标签: php forms debugging function

此功能失败 -

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; 
        }

当我取消注释打印“这里”时,它有效! (虽然“这里”没有打印)。到底是怎么回事?!

3 个答案:

答案 0 :(得分:3)

如果你这样做

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

以下块不依赖于if。

因此,取消注释print "here";实际上只是删除了以下代码块的if

小心缩进和支撑的连贯性,这有助于避免这种错误。

答案 1 :(得分:3)

你的内心状况永远不会实现:

if ($fieldname == "Expiration Date (Y/M/D)" || $fieldname == "N/A" ) ...
只要您在使用

之前已经整理出一个闭包,就永远无法实现

if ($fieldname == "date_expires_input") ...

答案 2 :(得分: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; 
        }