2017-04-04 56 views
0

这里是我的代码未定义的索引,但我不明白为什么

if (isset($_POST['error']) && $_POST['error'] != 2 && $_POST['error'] != 1) { 
    return true; 
} else if (isset($_POST['error']) && $_POST['error'] == 2 || $_POST['error'] == 1) { 
    return false; 
} else { 
    return false; 
} 

请帮助。 谢谢。

+1

当您执行'&&'时,您会显示更多代码 –

+0

它将评估所有条件,直到出现错误。当你执行'||'时,它会评估所有的条件,直到事情成立。由于你的第一个条件评估为false,第二个条件被调用,但是'_ _POST ['error']'不存在。 – Augwa

回答

0

像Augwa说:

  • 的& &运营商将评估所有条件,直到它们中的任何一个是假的。
  • ||操作员将评估所有条件,直到任何一个条件成立。

A液:

if(isset($_POST['error'])) { 

    if($_POST['error'] != 2 && $_POST['error'] !=1) { 
     // Do stuff here 
     return true; 
    }else if($_POST['error'] == 2 || $_POST['error'] == 1) { 
     return false; 
    } else { 
     return false; 
    } 
} 
2

当你& &直到东西是假的,将评估所有条件。当你做||它会评估所有条件,直到某些事情成立。由于您的第一个条件评估为false,因此第二个条件被调用,但$_POST['error']不存在。

您可能想要这样做,请注意围绕您的两个错误的括号。

if(
    isset($_POST['error']) && 
    (
     $_POST['error'] == 2 || 
     $_POST['error'] == 1 
    ) 
) 

它也可以更好地重写为。

if(
    isset($_POST['error']) && 
    in_array($_POST['error'], array(1,2)) 
) 
+0

谢谢大家,它解决了这个问题 – phabeon

0

你应该如下修改代码...始终将与您||比较括号内的。因为||条件将检查最后一段代码以找出“真实”值。通过重新编码为..... & &(... || ....),执行将从点& &返回,并且不会执行(.... || .....)部分

if (isset($_POST['error']) && $_POST['error'] != 2 && $_POST['error'] != 1) { 
    return true; 
} else if (isset($_POST['error']) && ($_POST['error'] == 2 || $_POST['error'] == 1)) { 
    return false; 
} else { 
    return false; 
} 
相关问题