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


Removing Comment Line breaks my code

此函数失败 -

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

但是当我取消评论打印"这里"时,它可以工作!(虽然"这里"没有打印)。这是什么鬼?!

如果你这样做

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

以下块不依赖于 IF。

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

注意牙套的缩进和连贯性,这有助于避免此类错误。

你的內在狀態永遠不會得到滿足:

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

您之前已经在整理一个闭包,就永远不会被填满

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

它失败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; 
        }