使用 is_numeric() 并将类型转换为 (int)


Using is_numeric() and typecasting to (int)

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

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

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

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

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

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

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

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

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

另请参阅:php 检查变量是否为整数

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

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

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

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

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