【问题标题】:is it ok to multiply to one a variable to check if is it really a number in php?是否可以将变量乘以一个以检查它是否真的是 php 中的数字?
【发布时间】:2011-06-22 03:32:43
【问题描述】:

我这样做是为了检查并已经在 php 中使用了 number 类型的变量:

$myvar = $myvar * 1;

有了这个,我有一个数字,或者如果 $myvar 有任何其他字符,结果是 0

我想知道这是否会在将来给我带来麻烦。

为了防止起见,我使用了一个包含上述代码的函数,因此我可以在需要时对其进行更改。例如:

$myvar = IntOrZero($myvar);

所以我的问题是这是否是检查和使用数字变量的好方法?

编辑:
使用 * 1,我确信它会返回一个 number 类型的变量。
见:

$var = "350";
$num = 120;
// builtin
if (is_numeric($var))
  echo($var - $num);

// multiplying
$var *= 1;
echo($var - $num);

虽然我不确定内置方法是否会回应我想要的,但我确信乘法会。
我有点不在乎 $var 是否是数字,如果不是,我不会向用户显示任何消息,如果不是数字,我将使用 0 值。根据答案,这是一个好方法吗?

function IntOrZero($var){
   return is_numeric($var) ? intval($var) : 0;
}

谢谢,

【问题讨论】:

  • 回答:没有。使用内置函数。
  • 尽管下面的每个人都说有正确的方法可以做到这一点.. 冒着让每个人都对我生气的风险.. 有时,对于无关紧要的小项目,这只是很容易写 $myvar = 0 + $myvar; (表述略有不同,但思路相同)
  • @Jonathan is_numeric($var) ? intval($var) : 0 等价于intval($var),也就是等价于(int)$var。无需特殊功能。
  • @deceze:奇怪的是,对我来说, (int)$var 有点 osbcure,我的意思是,看着它我不确定它是否会尝试将字符串转换为 int 或将其解析为一个它,看到了吗?
  • @Jonathan 没有区别。它会将anything 变成int。如果字符串在任何有效表达式中包含数字,它们将被“解析”为int。这些动态类型转换规则是 PHP 的核心,您应该真正习惯它们。 php.net/manual/en/…

标签: php variables numbers integer


【解决方案1】:

不,这不是一个好方法,原因如下:

$ php -r 'echo array() * 1;'
Fatal error: Unsupported operand types in Command line code on line 1

要确保变量是数字,cast it

$integer = (int)$integer;
$float = (float)$float;

检查是否为数字:

is_numeric($var)    // number or string containing any valid numeric expression
ctype_digit($var)   // string containing only digits
is_int($var)        // is of type int
is_float($var)      // is of type float

这些都略有不同,具体取决于您要检查的具体内容。参考文档:

http://php.net/is_numeric
http://php.net/manual/en/function.ctype-digit.php
http://php.net/is_int
http://php.net/is_float

【讨论】:

    【解决方案2】:

    嗯,你为什么不做正确的检查?

    喜欢:

    我强烈建议您使用正确的方法来检查您的价值。

    【讨论】:

      【解决方案3】:

      is_int() \ is_numeric() \ ctype_digit() 有什么问题??

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-04
        • 2021-10-03
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 2015-12-15
        相关资源
        最近更新 更多