好的,我已经阅读了一些指南,但我仍然对此目的感到困惑。
我在一个项目中遇到过一些代码,我从之前的开发人员那里学到了一些代码,其中包含了这样的项目:
if (is_numeric($var) && ((int)$var == $var){
在第二次检查中对$ var进行类型转换的目的是什么?如果$ var不是数字,或者至少是一个可以计算为数字的字符串,那么整个事情将评估为false。即使$ var是一个字符串而不是一个数字,第二次检查将再次评估为true,如果该字符串可以计算为一个数字。
使用is_numeric()并将其保留在那是不是更有意义?
答案 0 :(得分:2)
这是尝试解决一个常见问题,因为某些看似明显的策略存在局限性:
is_numeric($var)
都会返回true,例如'1.5e10'
(int)$var == $var
检查将数字转换为int
会产生一个与原始值进行比较的值,但对于非数字字符串,PHP会尝试变得聪明,因此'1a' == 1
< / LI>
如果两项检查都成功,则为整数,恭喜。
但是,如果你想要的是一个正整数,ctype_digit((string)$var)
,它只是检查字符串是否只包含数字,是一个更紧凑的选择。
答案 1 :(得分:0)
如评论中所述,is_numeric
只检查变量是否为数字。第二次检查(int)$var == $var
检查数字的整数值是否等于该数字。换句话说,如果数字是整数。
如果数字是实数,is_numeric
将返回true。但在第二次检查中,实数被转换为整数。所以3.14变为3,3==3.14
失败。
仅当数字是整数时,第二次检查才返回true。
答案 2 :(得分:0)
正如科尔已经指出的那样,is_numeric
函数可以告诉你特定的$var
是否是一个数值,它可能是也可能不是整数。
(int)$var == $var
正在检查它是否为整数。您也可以使用is_int。