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

在PHP中,我可以区分intval(null)和intval(“0”)的结果吗?,php,Php,我通过POST获取输入值,其中一些可能是ID引用的其他内容,有些从0开始。当选择ID为0的对象或没有值的对象时,是否有类似于intval()的方法在解析失败时返回比0更有用的内容?或者我可以用某种方式将intval()的结果与解析失败区分开来吗 例如: echo intval(null); // 0 echo intval("0"); // 0 您可以使用该函数确定差异: filter_var(null, FILTER_VALIDATE_INT); // false filter_var(

我通过POST获取输入值,其中一些可能是ID引用的其他内容,有些从0开始。当选择ID为0的对象或没有值的对象时,是否有类似于
intval()
的方法在解析失败时返回比
0
更有用的内容?或者我可以用某种方式将
intval()
的结果与解析失败区分开来吗

例如:

echo intval(null); // 0
echo intval("0");  // 0
您可以使用该函数确定差异:

filter_var(null, FILTER_VALIDATE_INT);
// false

filter_var('0', FILTER_VALIDATE_INT);
// int(0)
您还可以添加标志来专门接受十六进制和八进制值,但我不建议您这样做

顺便说一句,在更可能的情况下,变量来自
$\u POST
,您也可以使用
filter\u input()

我之所以在
过滤器输入的结果上使用
是因为当没有发布任何内容时,会返回
null
;使用
is_int()
可以防止此问题

编辑

如果问题真的是关于
null
vs
'0'
的,您可以比较
$var!==空

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

您可以先检查它是否是一个数字:

is_numeric($val);

好的,现在开始解决问题

preg_match('/^\d+$/','0') //is true

preg_match('/^\d+$/',NULL) //is false

在将它们转换为不能为null或字符串的值之前测试它们怎么样P表达式
null!==0
“0”!=0和
“0”!=null
都是真的。这里需要一个简单的
if($val==null)
函数。您可以使用PHP gettype函数。并比较其是否为NULL或整数。如果引用,将为字符串。如果这些值来自一篇文章,那么您想要比较的值实际上不太可能是
null
@Jack-它可能是未定义的(即如果它根本没有包含在文章中),在这种情况下,
null
将是默认值,一旦您忽略PHP未定义的警告。注意它使用了过滤器扩展(从PHP5.2开始就包含在php基本扩展中)当然,这并不能真正解决任何问题,因为您现在必须区分
0
false
。。。。。。。。。。@аааааСаача如果您是对的,我在命令行上错误地测试了它:)@Jack:那么为什么不使用
null==以什么开头?:)@Jon hehe,也许他也想测试空字符串?但不是int,所有的数字(也是float),但是如果它是一个数字,并且intval返回0,你就会知道值是0。如果它不是一个数字,并且intval返回0,您将知道它不是0(比如null),这完全等同于
是数值($value)
<代码>是int(intval(anything))
是无用的,因为它总是正确的;什么时候转换成int的东西不是int?@cHao:请先测试代码:)还有一件事,如果第一个条件为false,那么下一个表达式就不会被计算。PHP文档说我不在乎它是否有效。我的意思是,你在做无用的测试。你先测试它,包括和不包括
&&&
的所有内容,看看在这两种情况下是否得到完全相同的结果。@cHao:请先检查问题。你真的没有得到答案
intval($x)
always,always返回一个整数。测试它是否是整数是没有用的,因为如果你知道
intval
是如何工作的,你已经知道答案了。
preg_match('/^\d+$/','0') //is true

preg_match('/^\d+$/',NULL) //is false