【问题标题】:Using is_numeric() and typecasting to (int) [closed]使用 isnumeric() 并将类型转换为 (int) [关闭]
【发布时间】:2013-10-13 04:13:11
【问题描述】:

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

我从以前的开发人员那里获得了一个项目中的一些代码,其中包含类似这样的项目:

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

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

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

【问题讨论】:

  • is_numeric 并不意味着它是一个整数。它只是意味着它是一个数字。
  • 天啊,我没注意。无论如何,感谢您的回答。

标签: php


【解决方案1】:

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

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

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

但是,如果您想要的是一个正整数,ctype_digit((string)$var),它只是检查字符串是否只包含数字,这是一个更紧凑的替代方案。

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

【讨论】:

    【解决方案2】:

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

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

    只有当数字是整数时,第二次检查才返回真。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-16
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2018-05-11
        • 1970-01-01
        相关资源
        最近更新 更多