PHP 问题:发布变量
问题
采用以下HTML表单。
提交上述表单后,以下PHP代码的输出是什么,为什么?
if ($_POST['number'] === 0) { echo 'number is zero'; } else { echo 'number is not zero'; }
回答
上面代码的输出是“数字不为零”。发生这种情况是因为我们使用===运算符来查看变量的值和类型。$_POST数组的'number'元素与整数0之间的比较不会返回true,因为post数组的每个值始终是一个字符串。这可以通过gettype()对值使用函数来证明,就像这样。
printgettype($_POST['number']);//prints'string'
这是在与post变量进行比较时需要考虑的事情,因为==运算符可能会导致误报被接受。例如,如果post数组包含值'false',则以下代码将返回true。
var_dump('false'==0);//prints'booleantrue'
您可能认为转换$_POST['number']值会解决这个问题。这适用于大多数情况,但如果输入了“false”值,则强制转换将导致值为0。
var_dump((int)false);//prints'int0'
为了解决这个问题,您需要使用类似的函数is_numeric()来确保字符串是一个数字,然后再尝试将其强制转换为1。以下代码是上述块的更正版本,如果数字实际上为零,则只会打印“数字为零”。
if (is_numeric($_POST['number']) && (int)$_POST['number'] === 0) { echo 'number is zero'; } else { echo 'number is not zero'; }