此函数失败 -
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;
}