0

好的,我已经阅读了一些指南,但我仍然对这样做的目的有些困惑。

我在一个项目中遇到了一些代码,我从以前的开发人员那里得到了一些代码,其中有这样的项目:

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

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

只使用 is_numeric() 并保留它不是更有意义吗?

4

3 回答 3

2

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

  • is_numeric($var)对多种格式的数字返回 true,例如'1.5e10'
  • (int)$var == $var检查是否将数字转换int为与原始值进行比较的值,但对于非数字字符串 PHP 尝试变得聪明,所以'1a' == 1

如果两个检查都成功,那么它是一个整数,恭喜。

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

另见:php 检查变量是否为整数

于 2013-10-13T04:24:16.123 回答
0

正如科尔已经指出的那样,该is_numeric函数可以告诉您特定值是否$var是数值,它可能是整数,也可能不是整数。

(int)$var == $var是检查它是否是整数。您也可以为此使用is_int

于 2013-10-13T04:20:58.627 回答
0

如评论中所述,is_numeric只需检查变量是否为数字。第二个检查(int)$var == $var检查数字的整数值是否等于数字。换句话说,如果数字是整数。

如果数字是实数,则is_numeric返回 true 。但在第二次检查中,实数被转换为整数。所以 3.14 变成了 3,并且3==3.14失败了。

仅当数字是整数时,第二个检查才返回 true。

于 2013-10-13T04:17:38.377 回答