在PHP中,我可以区分intval(null)和intval("0")的结果吗?

Joa*_*son 5 php

我通过POST得到输入值,其中一些可能是ID指的是其他东西,有些从0开始.当选择ID为0的东西,或者没有值的东西时,是否有类似的方法intval()返回比0失败更有帮助的东西解析?或者我能否以某种方式区分intval()失败的结果?

例:

echo intval(null); // 0
echo intval("0");  // 0
Run Code Online (Sandbox Code Playgroud)

Ja͢*_*͢ck 7

您可以使用该filter_var()函数来确定差异:

filter_var(null, FILTER_VALIDATE_INT);
// false

filter_var('0', FILTER_VALIDATE_INT);
// int(0)
Run Code Online (Sandbox Code Playgroud)

您还可以添加标志以专门接受十六进制和八进制值,但我不建议您这样做.

顺便说一句,在变量来自的更可能的情况下$_POST,您还可以使用filter_input():

if (is_int($nr = filter_input(INPUT_POST, 'nr', FILTER_VALIDATE_INT))) {
    // $nr contains an integer
}
Run Code Online (Sandbox Code Playgroud)

is_int()在结果上使用的原因filter_input是因为什么都没有发布,null返回; 使用is_int()警卫来解决这个问题.

编辑

如果问题真的只是关于nullvs '0'你可以比较$var !== null:

if (!is_null($var)) {
    // $var is definitely not null
    // but it might also be an object, string, integer, float even, etc.
}
Run Code Online (Sandbox Code Playgroud)