PHP - 必须使用is_numeric(),还是可以使用比较符号来处理所有正数字情况?

时间:2010-07-23 03:51:43

标签: php math evaluation numeric isnumeric

似乎简单的比较符号>,>=及其反向组件可以评估某个变量是否为数字。示例$whatami='beast'; ($whatami<0)?echo 'NaN':echo 'is numeric!';

正值(数字&gt; 0)是否需要使用is_numeric()?似乎使用上面的比较符号将确定变量是否为数字..

4 个答案:

答案 0 :(得分:5)

正如我一直在发现的那样,很多这些辅助函数确实是必需的,因为PHP不是强类型的。本周早些时候我发布了一个similar question(尽管不是 类似的)关于isset。需要注意的一点是,在某些情况下(当存在混合类型时), PHP会将您的字符串更改为其整数值以进行比较。这不容忽视。我认为这是is_numeric

的一个强有力的案例

来自PHP Manual

  

如果您将数字与字符串进行比较   或者比较涉及数字   字符串,然后转换每个字符串   一个数字和比较   以数字方式执行。这些规则   也适用于switch语句。   类型转换不需要   当比较为===或时   !==因为这涉及比较   类型和价值。

要考虑的另一件事是PHP中的“0是什么”。那意义重大。它并不总是数字。它可能是一个数字字符串,布尔值false,整数等...这就是存在这些辅助函数的原因。

添加到我的回答:

改变你的榜样:

$whatami='beast';  
($whatami<5) ? echo 'less than 5' : echo 'more than 5';

PHP会将'beast'更改为等效的整数,然后进行比较。这会产生意想不到的结果。如果你真的想要类似的东西,你必须用另一个条件包装它:

$whatami='beauty';  
if(is_numeric($whatami){
    ($whatami<5) ? echo 'less than 5' : echo 'more than 5';
} else {
    exit('what, am I not pretty enough for a beast?');
}

然后你会得到你想要的结果(尽可能奇怪)。

答案 1 :(得分:2)

“可以评估某个变量是否为数字”与“评估某个变量是否为正数”之间存在很大差异。使用比较符号需要您对其进行两次测试(><=>=&amp; <)并且可能不会立即显而易见。 is_numeric意味着您只需要进行一次测试,并且非常清楚您正在做什么。

此外,字符串将评估为0,这意味着它会将您的想法抛出。坚持正确的命令:)

根据评论那么,在这种情况下,您要求将is_numeric与正数测试进行比较,不包括0.这不是{{1}的意图,很自然地,它可能没有必要。如果您进行的数学检查涉及0作为答案或作为范围的一部分,则需要is_numeric,否则您将不需要它。问题的第一部分提出了一个不同的问题,所以:

似乎简单的比较符号&gt;,&gt; =并且他们的反向组件可以评估某个变量是否为数字 - 不正确

是否存在正值(数字&gt; 0)需要使用is_numeric的情况? -

似乎使用上面的比较符号将确定变量是否为数字 - 否。他们可以确定变量是非零数还是未知,而不是数字。

答案 2 :(得分:0)

比较将取决于运营商左侧的数据类型。

要记住的重要一点是PHP 是一种强类型语言。如果你想比较一个数字并确保它是一个数字,那么是的,is_numeric()将是一个很好的检查。例如,

echo (is_numeric($whatami) && $whatami < 0) ? 'number greater than zero' : 'NaN or negative';

但是,这不应该概括。如果您可以更多地评论您想要做什么,您可以找到更详细的答案。

答案 3 :(得分:0)