php三元运算符在输入0时失败

时间:2014-04-04 06:10:01

标签: php

以下代码很有效,直到inQuantity收到零“0”。收到零后,它将其评估为空,并输入空值而不是“0”。如果输入“0.00”,则评估为非空。

$_POST['inQuantity'] = (!empty($_POST['inQuantity'])) ? $_POST['inQuantity'] : NULL;

以下代码生成相同的结果

    if (empty($_POST['inQuantity'])) {
        $state = "empty";
    } else {
        $state = "full";
    }

当inQuantity为“0”时,$ state的输出为“空”

有人知道这是为什么吗?

2 个答案:

答案 0 :(得分:5)

在这种情况下你不应该使用empty,因为empty的标准行为在这些情况下返回true:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)

尝试使用isset():

$_POST['inQuantity'] = (isset($_POST['inQuantity'])) ? (float) $_POST['inQuantity'] : NULL;

答案 1 :(得分:1)

因为empty('0')会产生true,所以你必须更具体地考虑你认为是空的;例如:

if (isset($_POST['inQuantity'])) {
    // The 'inQuantity' parameter was passed via $_POST
} else {
    // Not passed
}

你可以认为一个空字符串是空的:

if (isset($_POST['inQuantity']) && strlen($_POST['inQuantity'])) {
    // The 'inQuantity' parameter was passed via $_POST
    // and contains at least one character (worst case, it's an array)
} else {
    // Not passed or empty
}

另一种方法是使用输入过滤:

$quantity = filter_input(INPUT_POST, 'inQuantity', FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE);

if ($quantity !== null) {
    // value was passed and is a valid floating point value
}