使用is_numeric()和类型转换为(int)

时间:2013-10-13 04:13:12

标签: php

好的,我已经阅读了一些指南,但我仍然对此目的感到困惑。

我在一个项目中遇到过一些代码,我从之前的开发人员那里学到了一些代码,其中包含了这样的项目:

if (is_numeric($var) && ((int)$var == $var){

在第二次检查中对$ var进行类型转换的目的是什么?如果$ var不是数字,或者至少是一个可以计算为数字的字符串,那么整个事情将评估为false。即使$ var是一个字符串而不是一个数字,第二次检查将再次评估为true,如果该字符串可以计算为一个数字。

使用is_numeric()并将其保留在那是不是更有意义?

3 个答案:

答案 0 :(得分:2)

这是尝试解决一个常见问题,因为某些看似明显的策略存在局限性:

    对于许多格式的数字,
  • is_numeric($var)都会返回true,例如'1.5e10'
  • (int)$var == $var检查将数字转换为int会产生一个与原始值进行比较的值,但对于非数字字符串,PHP会尝试变得聪明,因此'1a' == 1 < / LI>

如果两项检查都成功,则为整数,恭喜。

但是,如果你想要的是一个正整数,ctype_digit((string)$var),它只是检查字符串是否只包含数字,是一个更紧凑的选择。

另请参阅:php check to see if variable is integer

答案 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