此功能失败 -
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;
}
但当我取消注释打印“这里”时,它有效! (虽然“这里”没有打印)。到底是怎么回事?!
答案 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;
}